如何在列表中搜索或查找特定子字符串

时间:2012-10-19 08:24:48

标签: python list

value = ["python:guru-age20",
         "is_it_possible_time100:goodTime99",
         "hmm_hope_no_onecanansswer"]

如何从此字符串列表中获取特定字符串?我需要从goodTime99字符串及其确切位置

中找到li[1]

if value.find("goodTime99") != -1:如果我提供整个字符串is_it_possible_time100:goodTime99,我知道会有效。

其他如何通过搜索goodTime99而不是搜索is_it_possible_time100:goodTime99来确定排名? value.index("goodTime99")发出错误。

我不是要搜索整个字符串,value.index("is_it_possible_time100:goodTime99")很好,但我不想要这个。无论如何要做到这一点?

4 个答案:

答案 0 :(得分:3)

如果您只想检查列表中任何字符串中是否存在"goodTime99",您可以尝试:

value = ["python:guru-age20", "is_it_possible_time100:goodTime99","hmm_hope_no_onecanansswer"]
if any("goodTime99" in s for s in value):
    # found it

如果您需要确切位置:

>>> next((i for i, s in enumerate(value) if "goodTime991" in s), -1)
1

或:

def find_first_substring(lst, substring):
    return next((i for i, s in enumerate(lst) if substring in s), -1)

>>> find_first_substring(value, "goodTime99")
1

答案 1 :(得分:2)

如果你想要单行答案,你可以

In [339]: [value.index(x) for x in value if x.find("goodTime99") > -1]
Out[339]: [1]
最简单的方法可能是:

它将为您提供包含列表

中子字符串的字符串的所有索引
In [334]: value = ["python:guru-age20",
   .....:          "is_it_possible_time100:goodTime99",
   .....:          "hmm_hope_no_onecanansswer"]

In [335]: indexs = []

In [336]: for x in value:
   .....:     if x.find("goodTime99") > -1:
   .....:         indexs.append(value.index(x))
   .....:

In [337]: print indexs
[1]

In [338]: int(*indexs)
Out[338]: 1

答案 2 :(得分:1)

如果需要,这将为您提供所有匹配的索引:

filter(lambda x: x[1].find("goodTime99") != -1, enumerate(value))

如果您只想要索引,那么

[e[0] for e in filter(lambda x: x[1].find("goodTime99") != -1, enumerate(value))]

例如,这就是我得到的:

>>> value = ["python:guru-age20", "is_it_possible_time100:goodTime99","hmm_hope_no_onecanansswer"]
>>> res = [e[0] for e in filter(lambda x: x[1].find("goodTime99") != -1, enumerate(value))]
>>> res
[1]

答案 3 :(得分:0)

您只需依次搜索每个字符串:

for s in value:
  if s.find("goodTime99"):
     print "found in", s
     break