Par exemple, s’il est adopté le texte suivant :
Comment puis-je vérifier pour voir si `` est vide ?
Par exemple, s’il est adopté le texte suivant :
Comment puis-je vérifier pour voir si `` est vide ?
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 :
D'autres personnes semblent être généraliser à votre question au-delà de juste list
s, 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 list
s é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 échoue avec numpy tableaux parce que numpy essaie de jeter le tableau d'un tableau d' bool
s et if x
tente d'évaluer l'ensemble de ceux - bool
s à 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()
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.0
ou 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.
len
peuvent donner des résultats inattendusPar exemple,
len( numpy.zeros((1,0)) )
retourne 1, même si le tableau a zéro des éléments.
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...
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 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.