web-dev-qa-db-fra.com

Quel est le meilleur moyen de vérifier si un tuple a des valeurs vide/Aucune en Python?

Quelle est la meilleure façon/la plus efficace de vérifier si toutes les valeurs de Tuple? Dois-je parcourir tous les éléments du tuple et vérifier ou existe-t-il un moyen encore meilleur?

Par exemple:

t1 = (1, 2, 'abc')
t2 = ('', 2, 3)
t3 = (0.0, 3, 5)
t4 = (4, 3, None)

En vérifiant ces n-uplets, chaque Tuple, à l'exception de t1, devrait renvoyer True, ce qui signifie qu'il existe une valeur vide.

P.S. il y a cette question: Teste si Tuple ne contient que des valeurs None avec Python , mais ne concerne-t-il que des valeurs None

13
Andrius

C'est très facile:

not all(t1)

renvoie False uniquement si toutes les valeurs dans t1 sont non-vide/non nul et non pas None. all court-circuits, il suffit donc de vérifier les éléments jusqu'au premier élément vide, ce qui le rend très rapide.

26
Tim Pietzcker

Une réponse utilisant tout a été fournie:

not all(t1)

Cependant, dans un cas comme t3, cela retournera True car l'une des valeurs est 0:

t3 = (0.0, 3, 5)

Le mot clé intégré "all" vérifie si toutes les valeurs d'une variable donnée sont des valeurs qui donnent un booléen négatif (False). 0, 0.0, '' et None sont évalués à False.

Si vous souhaitez uniquement tester Aucun (comme le titre de la question le suggère), cela fonctionne:

any(map(lambda x: x is None, t3))

Cela renvoie True si l'un des éléments de t3 est None, ou False si aucun d'entre eux ne l'est.

5
Grismar

Si par hasard voulez vérifier s'il y a une valeur vide dans un Tuple contenant des tuples comme ceux-ci:

t1 = (('', ''), ('', ''))
t2 = ((0.0, 0.0), (0.0, 0.0))
t3 = ((None, None), (None, None))

vous pouvez utiliser ceci:

not all(map(lambda x: all(x), t1))

Sinon, si vous voulez savoir s'il existe au moins une valeur positive, utilisez ceci:

any(map(lambda x: any(x), t1))
0
tsveti_iko

Pour votre cas spécifique, vous pouvez utiliser la fonction all(), elle vérifie que toutes les valeurs d'une liste sont vraies ou fausses, veuillez noter qu'en python None, les chaînes vides et 0 sont considérées comme fausses.

Alors -

>>> t1 = (1, 2, 'abc')
>>> t2 = ('', 2, 3)
>>> t3 = (0.0, 3, 5)
>>> t4 = (4, 3, None)
>>> all(t1)
True
>>> all(t2)
False
>>> all(t3)
False
>>> all(t4)
False
>>> if '':
...     print("Hello")
...
>>> if 0:
...     print("Hello")
0
Anand S Kumar