使用一个“in”语句(Python)测试多个对象是不是在列表中[重复]

Posted

技术标签:

【中文标题】使用一个“in”语句(Python)测试多个对象是不是在列表中[重复]【英文标题】:Testing if multiple objects are in a list using one "in" statement (Python) [duplicate]使用一个“in”语句(Python)测试多个对象是否在列表中[重复] 【发布时间】:2012-08-29 14:02:41 【问题描述】:

可能重复: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

编辑:谢谢你的回答,我想我现在对如何做到这一点有了一个很好的想法。

【问题讨论】:

试试set(lst).issubset([word, word1])***.com/questions/3931541/… 【参考方案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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

你可以这样做:

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

【讨论】:

【参考方案4】:

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

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"])):
     ...

【讨论】:

在这两个示例中都有一组额外的括号。作为可调用对象的唯一参数的基因表达式可以写成all(foo for foo in thing) 我知道,但我更喜欢将它们明确地写在括号内。这使得更容易看到那里有一个可迭代的并有助于重构......额外的括号使用 vim 派上用场:)

以上是关于使用一个“in”语句(Python)测试多个对象是不是在列表中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python for-in Loop常见遍历方法

笔记如何在for语句中迭代多个可迭代对象

Python入门-4控制语句:06for循环结构-遍历各种可迭代对象-range对象

python中迭代器(转)

Python高级知识点总结

请教大神shell的for in语句中怎么使用多个变量