2012-05-21 66 views
29

我在Python翻转列表中的Python布尔值

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

一个布尔值列表,我想改变的逻辑相反[False, False, True , ...] 有一个内置的方式在Python做到这一点(有点像请拨打not(mylist))没有手写循环来反转元素?

回答

43

它很容易与列表理解:

mylist = [True , True, False] 

[not i for i in mylist] 

产生

[False, False, True] 
5

为什么不直接使用一个简单的列表理解?

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

只是好奇,是[:]必需品在这种情况下呐? – Levon

+2

@Levon,'[:]'表示'mylist'仍然指向同一个列表。如果列表应该在函数内部发生变化,这可能是需要的。 –

+0

@gnibbler但是列表理解正在创建一个新的列表,所以唯一的区别是使用[:] mylist的内存位置(id)不会改变,而不会改变它,它会? – Levon

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

我会做其他人的方式是说,而是用于记录替代的份上,你也可以做

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

怎么样以下

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

一元代数运算符(〜)将为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

Numpy明确包含此功能。函数 “numpy.logical_not(x [,out])”计算NOT x element-wise的真值。

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) 

返回[假假真]

+0

我是唯一一个不懂这个解释的单词吗? – DelightedD0D

+0

Numpy正在为你做。我已经添加了一个例子。 –