在多个列表中
in over multiple lists
我最近被这个搞糊涂了
if 2 in ([1,2] or [3,4]) : print(True)
else: print(False)
#prints True
or
是一个布尔运算符,那么它如何应用于列表?
- 为什么它的工作原理与
if 2 in [1,2] or [3,4]
相同?
- 使用
any()
print(any(2 in x for x in [[1, 2], [3, 4]]))
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)
...
我最近被这个搞糊涂了
if 2 in ([1,2] or [3,4]) : print(True)
else: print(False)
#prints True
or
是一个布尔运算符,那么它如何应用于列表?- 为什么它的工作原理与
if 2 in [1,2] or [3,4]
相同?
- 使用
any()
print(any(2 in x for x in [[1, 2], [3, 4]]))
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)
...