如何匹配列表的元素与字符串的不同长度子串?

时间:2014-02-21 02:34:58

标签: python

我已经做了一些编码,在这里:

s='hello world'
lst=['he','hel','wor']
i=0
for ch in lst:
    for i in range(len(s)):
        if s[i:i+len(ch)]==ch:
            contains=True            

        else:
            contains=False

        i+=1
print(contains)

我没有得到正确的回报。有人可以看看,请给我一些指示吗?感谢

2 个答案:

答案 0 :(得分:5)

contains = all(sub in s for sub in lst)

[sub in s for sub in lst]是一个列表推导,sub in s中每个元素sub的值lst。基本上,它为Trues中存在的lst中的每个元素返回False,并为lst中不存在的每个元素返回all()True是一个只返回any()的函数,如果您传递的迭代中的所有元素都是真的。与True比较,如果其可迭代中的任何元素是真实的,则返回contains = not any(sub not in s for sub in lst),例如你可以做{{1}}

答案 1 :(得分:1)

肯定有几种方法可以缩短它,但是这里的程序修改应该有效:

s = 'hello world'
lst = ['he','rld','wor']
i = 0
containsall = True

for ch in lst:
    contains = False
    for i in range(len(s) - len(ch) + 1):
        if s[i:i+len(ch)] == ch:
            contains = True            
            break

    if not contains:
       containsall = False
       break

print(containsall)

基本上,只要在单词中找到一个字符串,我们就会中断并转到下一个单词。否则,此字符串不在s中,我们不需要检查剩余的单词,我们就会突破主循环。如果所有子字符串都以'contains being True, we never get to containsall = False`传递,那么它总体上是真的;否则,它将返回False。