【问题标题】:Python: if list contains string print all the indexes / elements in the list that contain itPython:如果列表包含字符串打印列表中包含它的所有索引/元素
【发布时间】:2014-02-04 17:36:35
【问题描述】:

我能够检测到匹配项,但无法找到它们的位置。

给定以下列表:

['A second goldfish is nice and all', 3456, 'test nice']

我需要搜索匹配(即“nice”)并打印包含它的所有列表元素。理想情况下,如果要搜索的关键字“不错”,则结果应该是:

'A second goldfish is nice and all'
'test nice'

我有:

list = data_array
string = str(raw_input("Search keyword: "))
print string
if any(string in s for s in list):
    print "Yes"

所以它找到匹配项并打印关键字和“是”,但它没有告诉我它在哪里。

我应该遍历列表中的每个索引并为每次迭代搜索“s 中的字符串”还是有更简单的方法来做到这一点?

【问题讨论】:

    标签: python string list loops search


    【解决方案1】:

    试试这个:

    list = data_array
    string = str(raw_input("Search keyword: "))
    print string
    for s in list:
        if string in str(s):
            print 'Yes'
            print list.index(s)
    

    编辑为工作示例。如果你只想要第一个匹配的索引,你也可以在 if 语句评估为 true 之后中断

    【讨论】:

    • 我做了,它告诉我该列表不包含此类索引。我想我只是通过循环遍历每条记录并每次搜索来获得它。只是一种缓慢的方法。
    • 这是行不通的,因为如果strings 的子字符串,string in s 将返回 True,但 list.index(string) 只会在字符串的位置找到 element list.
    • 我已编辑以修复此 DSM。使用 Dan 和 bainikolaus 发布的列表推导式是否有优势?我发现我的版本更具可读性
    【解决方案2】:
    matches = [s for s in my_list if my_string in str(s)]
    

    matches = filter(lambda s: my_string in str(s), my_list)
    

    注意'nice' in 3456 会引发TypeError,这就是我在列表元素上使用str() 的原因。这是否合适取决于您是否将'45' 考虑在3456 中。

    【讨论】:

      【解决方案3】:
      print filter(lambda s: k in str(s), l)
      

      【讨论】:

        【解决方案4】:

        打印所有包含nice的元素

        mylist = ['nice1', 'def456', 'ghi789', 'nice2', 'nice3']
        sub = 'nice'
        print("\n".join([e for e in mylist if sub in e]))
        >>> nice1
            nice2
            nice3
        

        获取包含nice的元素的索引(不考虑字母大小写)

        mylist = ['nice1', 'def456', 'ghi789', 'Nice2', 'NicE3']
        sub = 'nice'
        index_list = []
        i = 0
        for e in mylist:
            if sub in e.lower():
                index_list.append(i)
            i +=1
        print(index_list)
        >>> [0, 3, 4]
        

        【讨论】:

          猜你喜欢
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-30
          • 1970-01-01
          • 2020-06-23
          • 1970-01-01
          • 2015-04-09
          相关资源
          最近更新 更多