设L为字符串列表。
以下是我用于在列表L中查找字符串texttofind
的代码。
texttofind = 'Bonjour'
for s in L:
if texttofind in s:
print 'Found!'
print s
break
您如何进行查找下一个功能?我是否需要存储以前找到的字符串的索引?
答案 0 :(得分:4)
巨大列表的一种方法是使用生成器。假设您不知道用户是否需要下一场比赛。
def string_in_list(s, entities):
"""Return elements of entities that contain given string."""
for e in entities:
if s in e:
yield e
huge_list = ['you', 'say', 'hello', 'I', 'say', 'goodbye'] # ...
matches = string_in_list('y', huge_list) # look for strings with letter 'y'
next(matches) # first match
next(matches) # second match
其他答案表明,如果您想立即获得所有结果,列表推导对于短列表非常有用。这种方法的好处在于,如果你从不需要第三个结果,就不会浪费时间去寻找它。再一次,这对大名单来说真的很重要。
更新:如果您希望循环在第一场比赛时重新开始,您可以执行以下操作......
def string_in_list(s, entities):
idx = 0
while idx < len(entities):
if s in entities[idx]:
yield entities[idx]
idx += 1
if idx >= len(entities):
# restart from the beginning
idx = 0
huge_list = ['you', 'say', 'hello']
m = string_in_list('y', huge_list)
next(m) # you
next(m) # say
next(m) # you, again
有关其他想法,请参阅How to make a repeating generator。
另一次更新
我第一次写这篇文章已经好几年了。这是使用itertools.cycle
的更好方法:
from itertools import cycle # will repeat after end
# look for s in items of huge_list
matches = cycle(i for i in huge_list if s in i)
next(matches)
答案 1 :(得分:3)
如果要查找L中具有s作为子字符串的字符串的所有索引,
[i for i in range(0, len(L)) if L[i].find(s) >= 0]
答案 2 :(得分:3)
查找L
中包含子字符串s
的所有字符串。
[f for f in L if s in f]
答案 3 :(得分:-1)
如果它存在,这将找到下一个。您可以将其包装在函数中,如果不包含,则返回None / Empty字符串。
L = ['Hello', 'Hola', 'Bonjour', 'Salam']
for l in L:
if l == texttofind:
print l
if L.index(l) >= 0 and L.index(l) < len(L):
print L[L.index(l)+1]