78

我在 Python 中有一个布尔列表

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

我想将其更改为逻辑上的对立面[False, False, True , ...] 是否有一种内置的方法可以在 Python 中执行此操作(类似于 call not(mylist)),而无需手写循环来反转元素?

4

8 回答 8

101

列表理解很容易:

mylist  = [True , True, False]

[not elem for elem in mylist]

产量

[False, False, True]
于 2012-05-21T00:43:52.057 回答
46

一元波浪号运算符 (~) 将为 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 类型。

于 2014-10-03T21:22:28.013 回答
15
>>> import operator
>>> mylist  = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]
于 2012-05-21T00:48:36.643 回答
12

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)

返回 [假假真]

于 2016-02-01T09:47:56.663 回答
10

numpy.invert 是另一个不错的选择:

x = [False, True, True] 
not_x = np.invert(x) # [True, False, False]
于 2019-01-19T13:09:09.830 回答
7

为什么不只使用简单的列表推导?

mylist[:] = [not x for x in mylist]
于 2012-05-21T00:44:06.457 回答
6

我会按照其他人所说的方式来做,但是为了记录替代方案,您也可以这样做

import operator
myList = map(operator.not_, myList)
于 2012-05-21T00:49:24.257 回答
3

下面的呢

>>> import numpy
>>> list(numpy.asarray(mylist)==False)
于 2013-07-30T08:16:34.223 回答