python - 使用“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。为什么要这样做,以及如何修改代码以使其行为正确?
解决方案
(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 y
x
bool(x)
y
or
y
bool(x)
做你想做的事,你可以使用这个any
功能:
print(any(x in [1,2,3] for x in (1, 2, 3)))
推荐阅读
- python - 在 3 个文本文件之间写入正数和负数
- ios - AudioKit 4.6 没有声音
- c# - 如何从 XML 文件中的 ListBox 中删除所选节点
- php - 浏览器是否尊重 php 的 WWW-Authenticate 标头中的领域字符串?
- java - 我总是得到“{“status”:504,“error”:“Gateway Timeout”,“message”:“com.netflix.zuul.exception.ZuulException:Hystrix Readed time out”}”?
- javascript - 更换幻灯片后如何更换音源?
- javascript - 为什么我的函数没有在我的 SetInterval 中被调用?
- python - 有没有办法将 2 段非常相似的代码变成一个函数并重复?
- elixir - 如何解决 lib/.../views/user_view.ex:16: undefined function user_path/3 编译错误
- firebase - 如何通过 Firebase 托管部署 Polymer 入门套件 3?