Python中的波浪符运算符

Python中的tilde运算符的用法是什么?

我可以考虑的一件事情是在string或列表的两边做一些事情,例如检查一个string是否是回文的:

def is_palindromic(s): return all(s[i] == s[~i] for i in range(len(s) / 2)) 

还有其他什么好用法?

它是从C中借用的一元运算符(只有一个参数),其中所有的数据types只是解释字节的不同方式。 这是“反转”或“补充”操作,其中input数据的所有位被反转。

在Python中,对于整数,整数的二进制补码表示的位反转(如在每个单独位的b <- b XOR 1中),并且结果再次解释为二进制补码整数。 所以对于整数, (-x) - 1相当于(-x) - 1

~操作符的具体forms以operator.invert的forms提供。 为了在你自己的类中支持这个运算符,给它一个__invert__(self)方法。

 >>> import operator >>> class Foo: ... def __invert__(self): ... print 'invert' ... >>> x = Foo() >>> operator.invert(x) invert >>> ~x invert 

任何具有同样类别实例的实例的“补充”或“反向”意义的类别都是逆运算符的可能候选者。 但是,运算符重载可能会导致混淆,因此在为您的类提供__invert__方法之前,确保这样做是有意义的。 (请注意,字节串[ex: '\xff' ]不支持这个操作符,即使颠倒字节串的所有位是有意义的。

~是python中的按位补码运算符 ,它基本上计算-x - 1

所以桌子看起来像

 i ~i 0 -1 1 -2 2 -3 3 -4 4 -5 5 -6 

因此,对于i = 0 ,它将比较s[0]s[len(s) - 1] ,对于i = 1 s[len(s) - 2]i = 1 s[1]s[len(s) - 2] s[1]进行比较。

至于你的其他问题,这可能对一系列按位破解有用。

除了是一个按位补码运算符, ~还可以帮助恢复一个布尔值,尽pipe这里不是传统的booltypes,而应该使用numpy.bool_


这解释了,

 import numpy as np assert ~np.True_ == np.False_ 

反转逻辑值有时可能是有用的,例如,下面的~运算符用于清理数据集并返回一个没有NaN的列。

 from numpy import NaN import pandas as pd matrix = pd.DataFrame([1,2,3,4,NaN], columns=['Number'], dtype='float64') # Remove NaN in column 'Number' matrix['Number'][~matrix['Number'].isnull()]