2012-05-21 15 views
29

Ho una lista booleano in PythonSfogliando i valori booleani in una lista Python

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

che voglio cambiare la logica opposta [False, False, True , ...] C'è un modo integrato per fare questo in Python (qualcosa di simile a un chiamare not(mylist)) senza un ciclo scritto a mano per invertire gli elementi?

risposta

43

E 'facile con la lista di comprensione:

mylist = [True , True, False] 

[not i for i in mylist] 

produce

[False, False, True] 
5

Perché non basta usare un semplice elenco di comprensione?

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

Solo curioso, è il [:] neces sary in questo caso? – Levon

+2

@Levon, il '[:]' significa 'mylist' si riferisce ancora alla stessa lista. Questo può essere desiderabile se si suppone che la lista sia mutata all'interno di una funzione. –

+0

@gnibbler Ma la comprensione delle liste sta creando una nuova lista, quindi l'unica differenza è che l'uso di [:] la posizione di memoria (id) di 'mylist' non cambierebbe mentre w/o it, sarebbe? – Levon

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

vorrei farlo nel modo tutti gli altri sta dicendo, ma per l'amor di alternative che documentano, si potrebbe anche fare

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

per quanto riguarda il seguente

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

L'operatore tilde unario (~) lo farà per un numpy.ndarray. Quindi:

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

Si noti che gli elementi della lista capovolta saranno di tipo numpy.bool_ not bool.

2

Numpy include questa funzionalità in modo esplicito. La funzione "numpy.logical_not (x [, out])" calcola il valore di verità di 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 stessi esempi)

Esempio:

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

ritorna [vero, vero, falso]

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

ritorna [Falso Falso Vero]

+0

Sono l'unico che non capisce una parola di questa spiegazione? – DelightedD0D

+0

Numpy lo sta facendo per te. Ho aggiunto un esempio. –

Problemi correlati