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

jus*_*ino 8 python conditional-operator python-3.x

可能重复:
Python检查列表中是否包含以下所有项目

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

if word in lst and word1 in lst:
    do x
Run Code Online (Sandbox Code Playgroud)

但我想知道我是否可以将该陈述缩短为:

if (word and word1) in lst:
    do x
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,但有什么有效的相似之处呢?

我尝试了以下内容,但正如您所看到的,它不会产生预期的结果.

>>> word in lst
True
>>> word1 in lst
True
>>> (word, word1) in lst
False
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢你的答案,我想我现在已经很清楚如何做到这一点.

Jul*_*ian 9

答案是正确的(至少其中一个是).但是,如果您正在进行遏制检查而不关心订单,就像您的示例可能建议的那样,真正的答案是您应该使用集合并检查子集.

words = {"the", "set", "of", "words"}
if words <= set_of_words:
   do_stuff()
Run Code Online (Sandbox Code Playgroud)


l4m*_*mpi 7

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

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

all检查iterable中的所有值是否都为真.因为我们使用发电机,所以它仍然是短路优化的.当然,如果单词列表不太大,你可以内联单词列表:

if all((w in lst for w in ["word1", "word2", "etc"])):
     ...
Run Code Online (Sandbox Code Playgroud)

  • 在这两个例子中你都有一套额外的parens.作为callables唯一参数的Genexps可以写成`all(foo for foo in thing)`. (4认同)