operadores - Volteando los valores booleanos en una lista Python
valores booleanos y operaciones logicas (7)
¿Por qué no usar una simple lista de comprensión?
mylist[:] = [not x for x in mylist]
Tengo una lista booleana en Python
mylist = [True , True, False,...]
que quiero cambiar al opuesto lógico [False, False, True , ...]
¿Hay una forma incorporada de hacer esto en Python (algo así como una llamada not(mylist)
) sin un ciclo escrito a mano para invertir los elementos ?
¿Qué pasa con el siguiente
>>> import numpy
>>> list(numpy.asarray(mylist)==False)
El operador de tilde único (~) hará esto para numpy.ndarray. Asi que:
>>> 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.
Es fácil con la lista de comprensión:
mylist = [True , True, False]
[not i for i in mylist]
rendimientos
[False, False, True]
Lo haría de la manera en que todo el mundo dice, pero para documentar las alternativas, también podrías hacer
import operator
myList = map(operator.not_, myList)
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)
devuelve [True, True, False]
mylist=numpy.logical_not(mylist)
print (mylist)
devuelve [False False True]
>>> import operator
>>> mylist = [True , True, False]
>>> map(operator.not_, mylist)
[False, False, True]