是什么解释了列表与numpy.arrays上布尔运算和按位运算的行为差异?
我对在python中正确使用' &'vs' and' 感到困惑,如下面的简单示例所示.
mylist1 = [True, True, True, False, True]
mylist2 = [False, True, False, True, False]
>>> len(mylist1) == len(mylist2)
True
# ---- Example 1 ----
>>> mylist1 and mylist2
[False, True, False, True, False]
# I would have expected [False, True, False, False, False]
# ---- Example 2 ----
>>> mylist1 & mylist2
TypeError: unsupported operand type(s) for &: 'list' and 'list'
# Why not just like example 1?
>>> import numpy as np …Run Code Online (Sandbox Code Playgroud) 我以前认为inPython 中的运算符使用相等性检查来检查某些集合中元素的存在==,因此element in some_list大致相当于any(x == element for x in some_list).例如:
True in [1, 2, 3]
# True because True == 1
Run Code Online (Sandbox Code Playgroud)
要么
1 in [1., 2., 3.]
# also True because 1 == 1.
Run Code Online (Sandbox Code Playgroud)
然而,众所周知,它NaN本身并不等同.所以我期待的float("NaN") in [float("NaN")]是False.而且它False确实是.
但是,如果我们使用numpy.nan而不是float("NaN"),情况则完全不同:
import numpy as np
np.nan in [np.nan, 1, 2]
# True
Run Code Online (Sandbox Code Playgroud)
但np.nan == np.nan仍然给False!
这怎么可能?np.nan和之间有什么区别float("NaN") …