我已经做了一些编码,在这里:
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)
我没有得到正确的回报。有人可以看看,请给我一些指示吗?感谢
答案 0 :(得分:5)
contains = all(sub in s for sub in lst)
[sub in s for sub in lst]
是一个列表推导,sub in s
中每个元素sub
的值lst
。基本上,它为True
中s
中存在的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。