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这里不是传统的bool
types,而应该使用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()]