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

Y a-t-il une fonction qui vérifie si la liste l contient uniquement None ou pas?comment vérifier si la liste ne contient que None en python

+0

Qu'est-ce que devrait-il revenir à la liste vide '[]'? – Constantin

+1

duplicata possible de [Comment vérifier si tous les éléments de la liste sont None?] (Http://stackoverflow.com/questions/6518394/how-to-check-if-all-items-in-the-list-are -none) –

+0

duplicata possible de [Plus concis façon de vérifier si une liste est vide ou \ [None \]?] (http://stackoverflow.com/questions/1270920/most-concise-way-to-check-whether -a-list-is-empty-or-none) – ThiefMaster

Répondre

24

Si vous voulez dire, pour vérifier si la liste l ne contient que Aucun,

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

"... ne contient que None" OU est vide. – Constantin

+0

@system: Pourquoi pas? – kennytm

+0

@systempuntoout, il s'agit en fait d'une expression de générateur. – Constantin

8

Essayez any() - il vérifie s'il y a un seul élément dans la liste qui est considéré True dans un contexte booléen. None évalue à False dans un contexte booléen, alors any(l) devient False.

Notez que, pour vérifier si une liste (et non son contenu) est vraiment None, if l is None doit être utilisé. Et if not l pour vérifier si c'est soit Aucun (ou toute autre chose qui est considéré False) ou vide.

+0

>>> any ([Aucun, Aucun, 0]) donnera Faux –

+0

Comment est-ce que je suis allé aussi loin sans avoir entendu parler de 'any()'? Incroyable. – otocan

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

est beaucoup plus rapide que d'utiliser tous() lorsque L est tous Aucun

$ 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 vous voulez vérifier si les membres de la liste sont None, vous pouvez faire une boucle sur les éléments et vérifier s'ils sont None

Si vous voulez vérifier si la liste elle-même est None, vous pouvez utiliser le type (varlist) et retournerez Aucun

vous pouvez faire

si (LST == None): ... Imprimer "oui"

fonctionne.

2

Personnellement, je préfère faire un set puis vérifier si elle est égale à un ensemble avec un élément None:

set(l) == {None} 

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

pas le plus rapide, mais encore plus vite que la mise en œuvre all(...):

$ 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

grâce à @JohnLaRooy pour le code de référence –

Questions connexes