首页 > 解决方案 > 使用“in”语句检查列表中的多个值之一

问题描述

我正在使用 Python 的“in”语句搜索列表以查看它是否包含其中的几个元素之一。但是,我正在发现问题。这是一个MWE:

print (1 or 2 or 3) in [1, 2, 3]

print (1 or 2 or 3) in [2, 3]

两个语句都应该返回True,但实际输出是:

True
False

似乎代码实际上在做的只是在列表中搜索数字 1,而不是 1、2 或 3。为什么要这样做,以及如何修改代码以使其行为正确?

标签: pythonlist

解决方案


(1 or 2 or 3) in [1, 2, 3]相当于

[1, 2, 3].__contains__(1 or 2 or 3)

不是

[1,2,3].__contains__(1) or [1,2,3].__contains__(2) or [1,2,3].__contains__(3)

. 表达式在实际被调用之前1 or 2 or 3被评估。如果为真,则计算为 ,否则计算为。(由于不是常规运算符或函数,因此在为 false时进行评估。)1__contains__x or yxbool(x)yorybool(x)

做你想做的事,你可以使用这个any功能:

print(any(x in [1,2,3] for x in (1, 2, 3)))

推荐阅读