python检查列表中是否有两个变量

时间:2016-04-07 19:35:54

标签: python

我是Python新手,在重写旧Python脚本的过程中,我遇到了以下几点:

value1 = 'some val 1'
value2 = 'some val 2'
some_list = #list of values

if (value1, value2) in some_list:

这会检查列表中是否有value1value2吗?

我用谷歌搜索了如何做到这一点,答案显示了不同的方法,我没有看到任何使用上述代码的建议。

这是在做别的吗?我应该保留还是改变它?

4 个答案:

答案 0 :(得分:5)

(value1, value2)tuple。您的检查是查看该元组是否在列表中。例如:

mylist = [4, 5, (4, 5), 6]
(4, 5) in mylist
>True #because the tuple (4, 5) is in the list
(5, 6)
>False #because although 5 and 6 are both in the list, the tuple is not.

如果您想查看元组中的每个项目是否都在列表中,请使用@apero提到的all()

mylist = [4, 5, 6, 7]
all(x in mylist for x in (4, 5, 6))
>True
all(x in mylist for x in (4, 5, 8))
>False

答案 1 :(得分:3)

您可以使用all

>>> lst = [1, 2, 3, 4, 5]
>>> values = (1, 3)
>>> all(value in lst for value in values)
True
>>> values1 = (1, 6)
>>> all(value in lst for value in values1)
False

all仅在所有值与条件匹配时评估为True ,在这种情况下"在列表中#34;。这是一个非常有用的builtin方法,因为只要其中一个值与条件不匹配,它就会停止评估。此技术称为 short-circuit evaluation

它的行为类似于if <test> and <test1> and <test2> .... :,它从左到右依次评估每个测试,并在测试未通过时立即返回False。

答案 2 :(得分:1)

另一个,使用集合:

>>> to_find = {4, 5, 6}
>>> mylist = [4, 5, 6, 7]
>>> to_find.intersection(mylist) == to_find
True
>>> mylist = [5, 6, 7, 8]
>>> to_find.intersection(mylist) == to_find
False

答案 3 :(得分:0)

如果要检查列表中是否有任何值:

>>> all(x in some_list for x in [value1, value2])

你现在正在做的是检查元组是否在列表中