可能重复:
Python Check if all of the following items is in a list
所以我想测试word和word1是否都在列表中。 当然,我可以写:
if word in lst and word1 in lst:
do x
但我想知道我是否可以将该陈述缩短为:
if (word and word1) in lst:
do x
当然,这不起作用,但是会有什么有效的相似之处吗?
我尝试了以下操作,但正如您所看到的,它不会产生预期的结果。
>>> word in lst
True
>>> word1 in lst
True
>>> (word, word1) in lst
False
编辑:感谢您的回答,我想我现在已经非常了解如何做到这一点。
答案 0 :(得分:9)
答案是正确的(至少其中一个是)。但是,如果您正在进行遏制检查并且不关心订单,就像您的示例可能建议的那样,真正的答案是您应该使用集合并检查子集。
words = {"the", "set", "of", "words"}
if words <= set_of_words:
do_stuff()
答案 1 :(得分:7)
列出您的单词和生成器表达式,检查它们是否在列表中:
words = ["word1", "word2", "etc"]
lst = [...]
if all((w in lst for w in words)):
#do something
all
检查迭代中的所有值是否都为真。因为我们使用发电机,所以它仍然是短路优化的。当然,如果单词列表不是太大,你可以内联单词列表:
if all((w in lst for w in ["word1", "word2", "etc"])):
...
答案 2 :(得分:2)
你可以这样做:
if all(current_word in lst for current_word in (word, word1)):
do x
答案 3 :(得分:1)
注意:不要使用它。这里只是为了说明python的“又一个”功能。
效率较低的解决方案:
>>> from itertools import permutations
>>> lis=[0,1,2,3,4]
>>> (1,2) in (z for z in permutations(lis,2)) #loop stops as soon as permutations(lis,2) yields (1,2)
True
>>> (1,6) in (z for z in permutations(lis,2))
False
>>> (4,2) in (z for z in permutations(lis,2))
True
>>> (0,5) in (z for z in permutations(lis,2))
False
>>> (0,4,1) in (z for z in permutations(lis,3))
True
>>> (0,4,5) in (z for z in permutations(lis,3))
False