我在Python中有一个布尔列表
mylist = [True , True, False,...]
我希望将其更改为逻辑相反的[False, False, True , ...]
是否有一种内置的方式在Python中执行此操作(类似于调用not(mylist)
)而没有手写循环来反转元素?
答案 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)