我有一个字符串列表 - 类似于
mytext = ['This is some text','this is yet more text','This is text that contains the substring foobar123','yet more text']
我想找到以foobar开头的任何东西的第一次出现。如果我正在贪图,那么我会搜索foobar *。我目前的解决方案看起来像这样
for i in mytext:
index = i.find("foobar")
if(index!=-1):
print i
哪种方法运行得很好,但我想知道是否有更好的方法(即更多的pythonic)这样做?
干杯, 麦克
答案 0 :(得分:15)
您还可以使用列表理解:
matches = [s for s in mytext if 'foobar' in s]
(如果您真的在寻找字符串以'foobar'开始,请注意以下几点:
matches = [s for s in mytext if s.startswith('foobar')]
答案 1 :(得分:9)
如果你真的想要第一次出现一个字符串,那就是用foobar开头的(这就是你的话所说的,虽然与你的代码非常不同,提供的所有答案,你提到的grep - 你会得到多么矛盾? - ) ,试试:
found = next((s for s in mylist if s.startswith('foobar')), '')
如果没有mylist项符合条件,则会给出一个空字符串作为found
结果。您也可以使用itertools等代替简单的genexp,但关键的技巧是使用next
内置函数的默认方式(Python 2.6及更好)。
答案 2 :(得分:6)
for s in lst:
if 'foobar' in s:
print(s)
答案 3 :(得分:5)
results = [ s for s in lst if 'foobar' in s]
print(results)
答案 4 :(得分:4)
如果你真的在寻找与foobar 开始的字符串(而不是>>中的foobar ):
for s in mylist:
if s.startswith( 'foobar' ):
print s
或
found = [ s for s in mylist if s.startswith('foobar') ]