我是Python新手,在重写旧Python脚本的过程中,我遇到了以下几点:
value1 = 'some val 1'
value2 = 'some val 2'
some_list = #list of values
if (value1, value2) in some_list:
这会检查列表中是否有value1
和value2
吗?
我用谷歌搜索了如何做到这一点,答案显示了不同的方法,我没有看到任何使用上述代码的建议。
这是在做别的吗?我应该保留还是改变它?
答案 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])
你现在正在做的是检查元组是否在列表中