2010-08-27 30 views
13
l=[None,None] 

¿Hay alguna función que compruebe si la lista l contiene solo None o no?cómo comprobar si la lista contiene solo None en python

+0

Lo ¿Debería regresar para la lista vacía '[]'? – Constantin

+1

posible duplicado de [¿Cómo comprobar si todos los elementos de la lista son Ninguno?] (Http://stackoverflow.com/questions/6518394/how-to-check-if-all-items-in-the-list-are -none) –

+0

posible duplicado de [forma más concisa para comprobar si una lista está vacía o \ [None \]?] (http://stackoverflow.com/questions/1270920/most-concise-way-to-check-whether -a-list-is-empty-or-none) – ThiefMaster

Respuesta

24

Si usted quiere decir, para comprobar si la lista l contiene sólo Ninguno,

if all(x is None for x in l): 
    ... 
+0

"... contiene solo Ninguno" O está vacío. – Constantin

+0

@system: ¿Por qué no? – kennytm

+0

@systempuntoout, esta es en realidad una expresión de generador. – Constantin

8

Pruebe any() - comprueba si hay un solo elemento en la lista que se considera True en un contexto booleano. None evalúa a False en un contexto booleano, por lo que any(l) se convierte en False.

Tenga en cuenta que, para comprobar si una lista (y no su contenido) es realmente None, debe utilizarse if l is None. Y if not l para verificar si es Ninguno (o cualquier otra cosa que se considere False) o está vacío.

+0

>>> any ([None, None, 0]) dará False –

+0

¿Cómo llegué tan lejos sin escuchar '(any)? Asombroso. – otocan

19
L == [None] * len(L) 

es mucho más rápido que el uso de todos() cuando L es todos ninguna

$ python -m timeit -s'L=[None]*1000' 'all(x is None for x in L)' 
1000 loops, best of 3: 276 usec per loop 
$ python -m timeit -s'L=[None]*1000' 'L==[None]*len(L)' 
10000 loops, best of 3: 34.2 usec per loop 
0

Si desea verificar si los miembros de la lista son Ninguno, puede recorrer los elementos y verificar si son Ninguno

Si desea comprobar si la lista en sí es Ninguno, puede utilizar el tipo (lista de variables) y volverá Ninguno

que puede hacer

si (LST == Ninguno): ... print "sí"

funciona.

2

yo personalmente prefiero hacer una set y luego verificar si es igual a un conjunto con un elemento None:

set(l) == {None} 

assert set([None, None, None]) == {None} 
assert set([None, 2, None]) != {None} 

No es el más rápido, pero aún más rápido que el all(...) aplicación:

$ python -m timeit -s'L=[None]*1000' 'all(x is None for x in L)' 
10000 loops, best of 3: 59 usec per loop 
$ python -m timeit -s'L=[None]*1000' 'set(L)=={None}' 
100000 loops, best of 3: 17.7 usec per loop 
$ python -m timeit -s'L=[None]*1000' 'L==[None]*len(L)' 
100000 loops, best of 3: 7.17 usec per loop 
+0

gracias a @JohnLaRooy por el código de referencia –

Cuestiones relacionadas