2012-05-21 18 views
29

Tengo una lista booleano en Pythonvoltear los valores booleanos en un pitón lista

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

que quiero cambiar a lo opuesto lógico [False, False, True , ...] ¿Hay una manera innata de hacer esto en Python (algo así como una llamar al not(mylist)) sin un ciclo escrito a mano para invertir los elementos?

Respuesta

43

Es fácil con lista por comprensión:

mylist = [True , True, False] 

[not i for i in mylist] 

produce

[False, False, True] 
5

Por qué no utilizar un simple lista por comprensión?

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

Solo curiosidad, es el [:] necesario sary en este caso? – Levon

+2

@Levon, el '[:]' significa 'mylist' todavía se está refiriendo a la misma lista. Esto puede ser deseable si se supone que la lista está mutada dentro de una función. –

+0

@gnibbler Pero la comprensión de la lista está creando una nueva lista, por lo que la única diferencia es que usar [:] la ubicación de la memoria (id) de 'mylist' no cambiará mientras no lo tenga, ¿lo haría? – Levon

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

lo haría de la forma en todos los demás dicen, pero por el bien de las alternativas que documentan, también podría hacer

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

qué pasa con el siguiente

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

El operador de tilde único (~) hará esto para numpy.ndarray. Entonces:

>>> import numpy 
>>> mylist = [True, True, False] 
>>> ~numpy.array(mylist) 
array([False, False, True], dtype=bool) 
>>> list(~numpy.array(mylist)) 
[False, False, True] 

Tenga en cuenta que los elementos de la lista volteada serán de tipo numpy.bool_ not bool.

2

Numpy incluye esta funcionalidad explícitamente. La función "numpy.logical_not (x [, out])" calcula el valor de verdad de 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 (con los mismos ejemplos)

Ejemplo:

import numpy 
mylist = [True , True, False] 
print (mylist) 

retornos [verdaderos, verdadero, falso]

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

retornos [Falso Falso verdadero]

+0

¿Soy el único que no entiende una palabra de esta explicación? – DelightedD0D

+0

Numpy lo hace por ti. He agregado un ejemplo. –

Cuestiones relacionadas