在列表 Python 中翻转布尔值

我有一个 Python 中的布尔列表

mylist  = [True , True, False,...]

我想把它改成逻辑上 [False, False, True , ...]的对立面 在 Python 中有没有一种内置的方法(类似于调用 not(mylist))来实现这一点,而不需要手工编写的循环来反转元素?

118066 次浏览

用列表内涵很简单:

mylist  = [True , True, False]


[not elem for elem in mylist]

产量

[False, False, True]

为什么不用个简单的列表内涵呢?

mylist[:] = [not x for x in mylist]
>>> import operator
>>> mylist  = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]

我会像其他人说的那样做,但是为了记录备选方案,您也可以这样做

import operator
myList = map(operator.not_, myList)

接下来怎么样

>>> import numpy
>>> list(numpy.asarray(mylist)==False)

一元波浪线操作符(~)将为 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 _ not bool 类型的。

显式地包含了这个功能 “ numpy.logic _ 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)

报税表〔假、假、真〕

反转是另一个不错的选择:

x = [False, True, True]
not_x = np.invert(x) # [True, False, False]