Python 使用“检查列表中的多个值之一”;在;陈述

Python 使用“检查列表中的多个值之一”;在;陈述,python,list,Python,List,我正在使用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。为什么要这样做?我如何修改代码以使其正确运行?(1或2或3)在[1,2,3]中相当于 [1, 2, 3].__contai

我正在使用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。为什么要这样做?我如何修改代码以使其正确运行?

(1或2或3)在[1,2,3]
中相当于

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

。表达式
1或2或3
在实际调用
\uuuuu contains\uuuu
之前计算为
1
<如果
bool(x)
为真,则code>x或y计算为
x
,否则计算为
y
。(由于
不是常规运算符或函数,
y
仅在
bool(x)
为false时进行计算。)

要执行所需操作,您可以使用
any
功能:

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

(1或2或3)
只是
1
,是的。您可以通过
打印(1或2或3)
看到这一点。规范:
(1或2或3)
本身是一个表达式,其计算结果为
1
,而不是
运算符中
的扩展。在b
中的
a中,您计算
a
,然后计算
b
,然后调用
b.。\uuuu包含\uuuuuu(a)
。谢谢,这正是我所需要的一种漂亮、紧凑的形式。奇怪的是,他们用这种方式实现了它,但我猜这有一个很好的理由。非常感谢。没那么奇怪。将
关键字中的
以及
的任意组合定义为某种嵌入式查询语言是非常困难的<
中的code>非常简单:它包含两个参数:容器和要检查的内容。不要期望编程语言具有自然语言语义。我认为更好地使用自然语言语义是Python的好处之一,尽管我认为这只是相对于其他语言而言的。当然,这是有限度的。这更自然,但在可能的情况下,它更多地扩展到文字而不是符号的使用(
,而不是
|
,等等)。考虑一下单个表达式
(1或2或3)
必须实际计算什么,才能使d中的
(a或b或c)
等同于
d中的a或d中的b或d中的c
,同时保持类似于
如果a或b或c:
<代码>或
不是常规功能,或者您无法处理短路。
print(any(x in [1,2,3] for x in (1, 2, 3)))