在多个列表中

in over multiple lists

我最近被这个搞糊涂了

if 2 in ([1,2] or [3,4]) : print(True)
else: print(False)
#prints True
  1. or 是一个布尔运算符,那么它如何应用于列表?
  2. 为什么它的工作原理与 if 2 in [1,2] or [3,4] 相同?
  1. 使用any()
print(any(2 in x for x in [[1, 2], [3, 4]]))
  1. or 适用于任何类型,而不仅仅是布尔值。它 returns 最左边的操作数是真实的,或者 False 如果 none 操作数是真实的。所以 ([1, 2] or [3, 4]) 等价于 [1, 2] 因为任何非空列表都是真实的。

一般来说,运营商不会像使用英语那样自动使用编程语言进行分发。 x in (a or b)x in a or x in b 不同。编程语言递归地评估表达式,因此 x in (a or b) 大致等同于:

temp = a or b
x in temp
  • 两种说法不同。
  • 在第一种情况下 python 将首先 运行 2 in [1,4] 它的 False 所以现在它将检查 bool([1,3]) 及其 True 所以它打印 1.
  • 但是对于第二种情况,第一个 ([1,4] or [1,3]) 正在执行,而这个 return 第一个非空列表。所以它会 return [1,4] 但是 2 不在列表中所以什么都不会打印。
  • 一切都与执行顺序有关。
  • 再看两个例子。特别是最后一个例子。 ([1,4] or [2,4]) 将 return [1,4] 并且 2 不在 [1,4] 中。现在它不会检查第二个列表 [2,4]。如果那是你想要的,这不是正确的方法。使用 any
>>> if 2 in [1,4] or [1,3]: # True
...     print(1)
...
1
>>> if 2 in ([1,4] or [1,3]): # False
...     print(1)
...
>>> if 2 in [1,4] or []: # False
...     print(1)
...
>>> if 2 in ([1,4] or [2,4]): # False!!
...     print(1)
...