Python 使用“检查列表中的多个值之一”;在;陈述
我正在使用Python的“in”语句搜索一个列表,查看其中是否包含几个元素之一。然而,我发现了一些问题。这里有一个MWE: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
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)))