3229 votes

Meilleur moyen de vérifier si une liste est vide

Par exemple, s’il est adopté le texte suivant :

Comment puis-je vérifier pour voir si `` est vide ?

7006voto

Patrick Points 20392
<pre><code></code><p>À l’aide de la booleanness implicite de la liste vide est tout à fait Pythonique.</p></pre>

1461voto

Harley Holcombe Points 34618

Pour le faire, la Pythonique consiste dans le guide de stylede :

Par séquences, (cordes, listes, tuples), utiliser le fait que vider les séquences sont fausses.

Oui :

No :

1066voto

Jabba Points 1664

Je le préfère explicitement :

Ainsi c’est 100 % clair que est une séquence (liste) et nous voulons tester sa taille. Mon problème avec est qu’il donne la fausse impression que `` est une variable booléenne.

412voto

Mike Points 2409

D'autres méthodes ne fonctionnent pas pour les tableaux numpy

D'autres personnes semblent être généraliser à votre question au-delà de juste lists, donc, j'ai pensé ajouter une mise en garde pour un autre type de séquence que beaucoup de gens pourraient utiliser. Vous devez être prudent avec les tableaux numpy, parce que d'autres méthodes qui fonctionnent bien pour lists échouer pour des tableaux numpy. J'explique pourquoi ci-dessous, mais en bref, la méthode préférée consiste à utiliser size.

Le "pythonic" façon ne fonctionne pas, je

Le "pythonic" façon échoue avec numpy tableaux parce que numpy essaie de jeter le tableau d'un tableau d' bools et if x tente d'évaluer l'ensemble de ceux - bools à la fois d'une sorte d'agrégat de valeur de vérité. Mais cela n'a aucun sens, si vous obtenez un ValueError:

>>> x = numpy.array([0,1])
>>> if x: print("x")
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Le "pythonic" chemin n'a pas de travail II

Mais au moins le cas ci-dessus vous indique qu'il a échoué. Si vous avez un tableau numpy avec un seul élément, l' if déclaration de "travail", dans le sens que vous ne recevez pas un message d'erreur. Cependant, si un élément se trouve être 0 (ou 0.0ou false, ...), l' if déclaration incorrecte de résultat en false:

>>> x = numpy.array([0,])
>>> if x: print("x")
... else: print("No x")
No x

Mais clairement x existe et n'est pas vide! Ce résultat n'est pas ce que tu voulais.

À l'aide de len peuvent donner des résultats inattendus

Par exemple,

len( numpy.zeros((1,0)) )

retourne 1, même si le tableau a zéro des éléments.

Le numpythonic façon

Comme expliqué dans la scipy FAQ, la méthode correcte dans tous les cas où vous savez que vous avez un tableau numpy est d'utiliser if x.size:

>>> x = numpy.array([0,1])
>>> if x.size: print("x")
x

>>> x = numpy.array([0,])
>>> if x.size: print("x")
... else: print("No x")
x

>>> x = numpy.zeros((1,0))
>>> if x.size: print("x")
... else: print("No x")
No x

Si vous n'êtes pas sûr de savoir si il pourrait être un list, un tableau numpy, ou quelque chose d'autre, vous devez combiner cette approche avec la réponse @dubiousjim donne pour assurer que le bon test est utilisé pour chaque type. Pas très "pythonic", mais il s'avère que python lui-même n'est pas pythonic dans ce sens...

173voto

Peter Hoffmann Points 13823

Une liste vide est lui-même considéré comme faux dans le vrai test de la valeur (voir la documentation python):

a = []
if a:
     print "not empty"

@Thomas Daren

EDIT: un Autre point contre les tests la liste vide comme Faux: Qu' le polymorphisme? Vous ne devez pas dépendre de une liste une liste. Il faut juste charlatans comme un canard - comment allez-vous pour obtenir votre duckCollection aux charlatans "Faux" quand il n'a pas d'éléments?

Votre duckCollection devrait mettre en oeuvre __nonzero__ ou __len__ donc la: fonctionne sans problèmes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X