假设我有以下方法,这是更好、更快、更 Pythonic 的方法 为什么?
if x == 2 or x == 3 or x == 4:
do following...
或:
if x in (2, 3, 4):
do following...
最佳答案
在 Python 3(3.2 及更高版本)中,您应该使用 set:
if x in {2, 3, 4}:
因为集合成员资格是一个 O(1) 测试,而对于使用单独的 或
相等性测试或使用元组中的成员资格进行测试,最坏情况下的 O(N) 性能。
在 Python 3 中,set literal 将被优化为使用 frozenset
常量:
>>> import dis
>>> dis.dis(compile('x in {1, 2, 3}', '<file>', 'exec'))
1 0 LOAD_NAME 0 (x)
3 LOAD_CONST 4 (frozenset({1, 2, 3}))
6 COMPARE_OP 6 (in)
9 POP_TOP
10 LOAD_CONST 3 (None)
13 RETURN_VALUE
请注意,此优化是 added to Python 3.2在 Python 2 或 3.0 或 3.1 中你最好使用元组。对于少量元素,每次执行的集合创建消除了查找时间的差异。
关于python - 我应该在 Python 3.x 的 if 语句中使用 'in' 还是 'or' 来根据多个值检查变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678118/