2017-01-05 59 views
0

我確信這很簡單,我正在看它,但我無法使它工作。python:通過字符串列表循環查找指定元素的索引

目標:使用循環遍歷字符串列表並找到搜索項。 返回第一個匹配的元素編號。

我試了幾個選項,似乎沒有任何工作,我還沒有找到如何在任何文本中做到這一點的工作描述。

這是我最好的嘗試至今:

def get_element_number(a_list, search_term): 
    for i in range(len(a_list)): 
     if search_term in a_list[i]: 
     return a_list.index(i) 
     elif not search_term in a_list: 
     return 'no match' 

錯誤消息:

Traceback (most recent call last): 
File "python", line 11, in <module> 
File "python", line 5, in get_element_number 
ValueError: 2 is not in list 

不找完整的答案,我要去哪裏錯了,或者如果我只是幫忙失去一些東西會很有幫助。

+0

你能提供a_list'的'樣本和'search_term'作爲函數調用發? – Chuck

+0

哦對不起! get_element_number(['a'','b','d'],'d') 我發現了一個可以接受使用列表長度的工作,但我非常感謝幫助和真正的答案! – Megan

回答

2

您可以用index = a_list.index(search_term)替換所有這些。

請注意,如果列表中不包含search_term,它將引發異常,因此您需要捕獲該異常並返回「not found」或類似內容。第二個注意:它只返回找到的search_term的第一個索引。

+1

我已經想出了該怎麼辦的例外(基本上把挑戰分解成部分,解決了我能做的事情,並把我的頭撞在桌子上,稍微休息一下)。 謝謝你的幫助! – Megan

3

if search_term in a_list[i]:True即使search_term在​​包含

所以在完全匹配index作品的情況下,但在部分匹配的情況下index會拋出異常。

除外:elif not search_term in a_list:是錯誤的。刪除它,否則你會在第一次不匹配時返回。

重寫成:

def get_element_number(a_list, search_term): 
    try: 
      return a_list.index(search_term) 
    except IndexError: 
      'no match' 

這是簡單,只執行一次搜索的優勢,這是重要的性能,明智的,當你使用線性搜索(不採取例外的開銷考慮)。

0
for index, s in enumerate(a_list): 
    if s == term: 
    return index 
return -1 
0
def get_element_number(a_list, search_term): 
    for index, value in enumerate(a_list): 
     if search_term in value: 
      return index 
    return 'not match' 
+0

我正在閱讀關於枚舉的內容,但我認爲它有點不同。謝謝! – Megan

0

這裏有一個簡單的改變你的代碼,將解決這個問題:

def get_element_number(a_list, search_term): 
    if search_term in a_list: #if search keyword is in the list 
     return a_list.index(search_term) #then return the index of that 
    else: 
     return 'no match!' 
相關問題