Python 为什么在计算布尔倒数级数和时需要括号或新变量?

Python 为什么在计算布尔倒数级数和时需要括号或新变量?,python,pandas,numpy,Python,Pandas,Numpy,鉴于一些数据: >> s = pd.Series([True, False, True, False, True]) 但是 及 为什么我们需要使用括号(~s).values或将~s.values存储在一个新变量中,以便~Series.sum()为s中的False值提供正确的数量 这是因为@juanpa.arrivillaga和@cwallenpole所述的优先级。事实上: >> ~3 is -4 True 因为access属性的优先级高于~运算符的优先级。所以它在

鉴于一些数据:

>> s = pd.Series([True, False, True, False, True])

但是

为什么我们需要使用括号
(~s).values
或将
~s.values
存储在一个新变量中,以便
~Series.sum()
s
中的
False
值提供正确的数量


这是因为@juanpa.arrivillaga和@cwallenpole所述的优先级。事实上:

>> ~3 is -4
True
因为access属性的优先级高于
~
运算符的优先级。所以它在被否定之前被求和

许多numpy/pandas对象覆盖矢量化计算的逐位运算符。不幸的是,这将导致他们的行为出人意料

换句话说,它被评估为:

~((s.values).sum())

它与评估顺序(or)有关
~
生成表达式右侧的反转。

不带括号,使用原始值调用first sum()。然后,sum()的结果被反转。使用(~values)。sum值首先被倒转,然后sum()被倒转列表缩放。

说真的,我知道有很多理由在主提要上对问题进行否决投票,但我认为今晚有几个有趣且经过深思熟虑的问题吸引了否决票,这是我不应该的。
>> x = ~s.values
>> x.sum() == (~s).values.sum()
True
>> ~3 is -4
True
~((s.values).sum())