在列表中寻找一个字符串的Python的方式(Pythonic way of searching fo

2019-07-31 23:14发布

我有一个字符串列表 - 像

mytext = ['This is some text','this is yet more text','This is text that contains the substring foobar123','yet more text']

我想找到的东西,与foobar的开始第一次出现。 如果我grepping然后我会做搜索foobar的*。 我目前的解决方案是这样的

for i in mytext:
    index = i.find("foobar")
    if(index!=-1):
        print i

这工作得很好,但我想知道如果有一个“好”(即更Python)这样的方式?

干杯,迈克

Answer 1:

您也可以使用列表理解:

matches = [s for s in mytext if 'foobar' in s]

(如果你真的找 “foobar的”作为THC4k注意到字符串,考虑以下因素:

matches = [s for s in mytext if s.startswith('foobar')]


Answer 2:

如果你真的想与foobar的开头的字符串的第一次出现(?这是你的话语说什么,不过从你的代码非常不同,所有的答案提供,你的grep提 - 如何能矛盾你 - ),尝试:

found = next((s for s in mylist if s.startswith('foobar')), '')

这给出了一个空字符串作为found如果没有MYLIST的项满足条件的结果。 你也可以使用itertools等,代替简单genexp的,但关键的诀窍是用这种方式next有一个默认的内置(Python 2.6中,更好地只)。



Answer 3:

for s in lst:
    if 'foobar' in s:
         print(s)


Answer 4:

results = [ s for s in lst if 'foobar' in s]
print(results)


Answer 5:

如果你真的找与foob​​ar的(不他们foob​​ar的) 开头的字符串:

for s in mylist:
  if s.startswith( 'foobar' ):
     print s

要么

found = [ s for s in mylist if s.startswith('foobar') ]


文章来源: Pythonic way of searching for a substring in a list