我在Python中有一个布尔列表
mylist = [True , True, False,...]
Run Code Online (Sandbox Code Playgroud)
我想改变到逻辑的对立面[False, False, True , ...]
是否有一种内置的方式在Python中执行此操作(类似于调用not(mylist))而没有手写循环来反转元素?
Lev*_*von 62
列表理解很容易:
mylist = [True , True, False]
[not i for i in mylist]
Run Code Online (Sandbox Code Playgroud)
产量
[False, False, True]
Run Code Online (Sandbox Code Playgroud)
小智 30
一元波浪号运算符(〜)将为numpy.ndarray执行此操作.所以:
>>> import numpy
>>> mylist = [True, True, False]
>>> ~numpy.array(mylist)
array([False, False, True], dtype=bool)
>>> list(~numpy.array(mylist))
[False, False, True]
Run Code Online (Sandbox Code Playgroud)
请注意,翻转列表的元素将是numpy.bool_而不是bool.
Joh*_*ooy 11
>>> import operator
>>> mylist = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]
Run Code Online (Sandbox Code Playgroud)
numpy.invert 是另一个不错的选择:
x = [False, True, True]
not_x = np.invert(x) # [True, False, False]
Run Code Online (Sandbox Code Playgroud)
Numpy明确包含此功能.函数"numpy.logical_not(x [,out])"计算NOT x元素的真值.
import numpy
numpy.logical_not(mylist)
Run Code Online (Sandbox Code Playgroud)
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.logical_not.html(同样的例子)
例:
import numpy
mylist = [True , True, False]
print (mylist)
Run Code Online (Sandbox Code Playgroud)
返回[True,True,False]
mylist=numpy.logical_not(mylist)
print (mylist)
Run Code Online (Sandbox Code Playgroud)
返回[False False True]
为什么不使用简单的列表理解?
mylist[:] = [not x for x in mylist]
Run Code Online (Sandbox Code Playgroud)
我会像其他人说的那样做,但是为了记录替代方案,您也可以这样做
import operator
myList = map(operator.not_, myList)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60337 次 |
| 最近记录: |