【问题标题】:python: loop through list of strings find index of specified elementpython:遍历字符串列表查找指定元素的索引
【发布时间】:2017-05-19 23:48:34
【问题描述】:

我确定这很简单,我正在看它,但我无法让它工作。

目标:使用循环遍历字符串列表并找到搜索词。 返回第一个匹配的元素编号。

我尝试了几个选项,但似乎没有任何效果,而且我还没有在任何文本中找到关于如何做到这一点的有效描述。

这是我迄今为止最好的尝试:

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

不是在寻找完整的答案,只是在我出错的地方或我遗漏的地方提供任何帮助会非常有帮助。

【问题讨论】:

  • 您能否提供函数调用中的a_listsearch_term 示例?
  • 哦,对不起! get_element_number(['a'', 'b', 'd'], 'd') 我找到了一个解决方法,它可以接受使用列表的长度,但我绝对感谢帮助和真正的答案!跨度>

标签: python list loops


【解决方案1】:

if search_term in a_list[i]:True,即使 search_term 包含a_list[i] 中。

所以在完全匹配的情况下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'

这更简单,并且具有只执行一次搜索的优点,当您使用线性搜索时,这在性能方面很重要(不考虑异常的开销)。

【讨论】:

    【解决方案2】:

    您可以将所有这些替换为index = a_list.index(search_term)

    请注意,如果列表不包含 search_term,它将引发异常,因此您需要捕获该异常并返回“未找到”或类似内容。第二点:它只返回找到的search_term的第一个索引。

    【讨论】:

    • 我已经想出了应对异常的方法(基本上将挑战分解为多个部分,解决了我能解决的问题,然后把我的头撞在了桌子上一点)。感谢您的帮助!
    【解决方案3】:
    for index, s in enumerate(a_list):
      if s == term:
        return index
    return -1
    

    【讨论】:

      【解决方案4】:
      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'
      

      【讨论】:

      • 我正在阅读枚举,但我认为它的工作方式有点不同。谢谢!
      【解决方案5】:

      对您的代码进行一个简单的更改即可解决该问题:

      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!' 
      

      【讨论】:

        【解决方案6】:
        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

        【讨论】:

        • "这是如果你想包含在 for 循环中。"不是一个语法正确的句子——你能澄清一下吗?
        • 我的意思是“保持一致”,因为他使用 for 循环来解决该问题。
        猜你喜欢
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-09
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        • 2017-04-22
        相关资源
        最近更新 更多