使用一个“in”语句测试列表中是否有多个对象(Python)

2024-05-13 22:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Python Check if all of the following items is in a list

所以我想测试word和word1是否都在列表lst中。 当然,我可以写:

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

编辑:谢谢您的回答,我想我现在已经很清楚该怎么做了。


Tags: andoftheintrueifcheckall
3条回答

答案是正确的(至少有一个是正确的)。然而,如果您正在执行包含检查,而不关心顺序,就像您的示例可能建议的那样,真正的答案是您应该使用集合,并检查子集。

words = {"the", "set", "of", "words"}
if words <= set_of_words:
   do_stuff()

你可以这样做:

if all(current_word in lst for current_word in (word, word1)):
  do x

列出你的单词和一个生成器表达式,检查它们是否在列表中:

words = ["word1", "word2", "etc"]
lst = [...]
if all((w in lst for w in words)):
    #do something

all检查iterable中的所有值是否为true。因为我们使用的是发电机,所以这仍然是短路优化的。当然,如果单词列表对于一行来说不是太大,您可以将其内联:

if all((w in lst for w in ["word1", "word2", "etc"])):
     ...

相关问题 更多 >