我确信这很简单,而且我正确地看着它,但我无法让它发挥作用。
目标:使用循环遍历字符串列表并查找搜索词。 返回第一个匹配的元素编号。
我尝试了一些选项,似乎没什么用,我还没有找到任何文本中如何做到这一点的工作描述。
这是我迄今为止的最佳尝试:
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 :(得分:3)
if search_term in a_list[i]:
即使True
中<{1}} ,也会search_term
。
因此,如果完全匹配a_list[i]
有效,但在部分匹配index
的情况下会抛出异常。
除此之外:index
错了。删除它,否则你将在第一次不匹配时返回。
将其重写为:
elif not search_term in a_list:
这更简单,并且具有仅执行一次搜索的优势,这在使用线性搜索时非常重要(不考虑异常的开销)。
答案 1 :(得分:3)
您可以使用index = a_list.index(search_term)
替换所有这些内容。
请注意,如果列表中没有包含search_term,则会抛出异常,因此您需要捕获该异常并返回&#34; not found&#34;或类似的东西。第二个注意:它只返回找到的search_term的第一个索引。
答案 2 :(得分:0)
for index, s in enumerate(a_list):
if s == term:
return index
return -1
答案 3 :(得分: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'
答案 4 :(得分: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!'
答案 5 :(得分:0)
def find_element(a_list, search_term):
i = 0
for e in a_list:
if e == search_term:
return i
i += 1
return -1
您可以在下面链接的视频中找到这个或其他解决方案的非常好的解释
https://www.youtube.com/watch?time_continue=216&v=GwOFHuPMCpM