我在 Python 中有一个布尔列表
mylist = [True , True, False,...]
我想将其更改为逻辑上的对立面[False, False, True , ...]
是否有一种内置的方法可以在 Python 中执行此操作(类似于 call not(mylist)
),而无需手写循环来反转元素?
我在 Python 中有一个布尔列表
mylist = [True , True, False,...]
我想将其更改为逻辑上的对立面[False, False, True , ...]
是否有一种内置的方法可以在 Python 中执行此操作(类似于 call not(mylist)
),而无需手写循环来反转元素?
列表理解很容易:
mylist = [True , True, False]
[not elem for elem in mylist]
产量
[False, False, True]
一元波浪号运算符 (~) 将为 numpy.ndarray 执行此操作。所以:
>>> import numpy
>>> mylist = [True, True, False]
>>> ~numpy.array(mylist)
array([False, False, True], dtype=bool)
>>> list(~numpy.array(mylist))
[False, False, True]
请注意,翻转列表的元素将是 numpy.bool_ 而不是 bool 类型。
>>> import operator
>>> mylist = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]
Numpy 明确地包含了这个功能。函数“numpy.logical_not(x[, out])”按元素计算 NOT x 的真值。
import numpy
numpy.logical_not(mylist)
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.logical_not.html(有相同的例子)
例子:
import numpy
mylist = [True , True, False]
print (mylist)
返回 [真,真,假]
mylist=numpy.logical_not(mylist)
print (mylist)
返回 [假假真]
numpy.invert 是另一个不错的选择:
x = [False, True, True]
not_x = np.invert(x) # [True, False, False]
为什么不只使用简单的列表推导?
mylist[:] = [not x for x in mylist]
我会按照其他人所说的方式来做,但是为了记录替代方案,您也可以这样做
import operator
myList = map(operator.not_, myList)
下面的呢
>>> import numpy
>>> list(numpy.asarray(mylist)==False)