在列表Python中翻转布尔值

时间:2012-05-21 00:42:45

标签: python

我在Python中有一个布尔列表

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

我希望将其更改为逻辑相反的[False, False, True , ...] 是否有一种内置的方式在Python中执行此操作(类似于调用not(mylist))而没有手写循环来反转元素?

8 个答案:

答案 0 :(得分:54)

列表理解很简单:

mylist  = [True , True, False]

[not i for i in mylist]

产量

[False, False, True]

答案 1 :(得分:29)

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

答案 2 :(得分:10)

>>> import operator
>>> mylist  = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]

答案 3 :(得分:7)

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)

返回[True,True,False]

mylist=numpy.logical_not(mylist)
print (mylist)

返回[False False True]

答案 4 :(得分:6)

为什么不使用简单的列表理解?

mylist[:] = [not x for x in mylist]

答案 5 :(得分:3)

我会像其他人一样说,但为了记录替代方案,你也可以这样做

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

答案 6 :(得分:3)

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

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

答案 7 :(得分:1)

以下

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