282 votes

Comment fonctionnent les fonctions any et all de Python?

Je tente de comprendre le fonctionnement des fonctions intégrées Python any() et all().

Je tente de comparer les tuples afin que si une valeur est différente, cela renverra True et s'ils sont tous les mêmes, cela renverra False. Comment fonctionnent-ils dans ce cas pour renvoyer [False, False, False] ?

d est un defaultdict(list).

print d['Drd2']
# [[1, 5, 0], [1, 6, 0]]
print list(zip(*d['Drd2']))
# [(1, 1), (5, 6), (0, 0)]
print [any(x) and not all(x) for x in zip(*d['Drd2'])]
# [False, False, False]

À ma connaissance, ceci devrait afficher

# [False, True, False]

car (1,1) sont les mêmes, (5,6) sont différents et (0,0) sont les mêmes.

Pourquoi évalue-t-il à False pour tous les tuples ?


Voir <a href="https://stackoverflow.com/questions/1342601">Manière pythonique de vérifier si une condition est vraie pour un élément d'une liste</a> pour une utilisation pratique de <code>any</code>.

5voto

David Gladson Points 153
s = "eFdss"
s = list(s)
all(i.islower() for i in s )   # FAUX
any(i.islower() for i in s )   # VRAI

2voto

Dany Kamuhanda Points 39

Le concept est simple:

M =[(1, 1), (5, 6), (0, 0)]

1) print([any(x) for x in M])
[Vrai, Vrai, Faux] #seul le dernier tuple n'a pas d'élément vrai

2) print([all(x) for x in M])
[Vrai, Vrai, Faux] #tous les éléments du dernier tuple ne sont pas vrais

3) print([not all(x) for x in M])
[Faux, Faux, Vrai] #Opérateur NON appliqué à 2)

4) print([any(x)  and not all(x) for x in M])
[Faux, Faux, Faux] #Opérateur ET appliqué à 1) et 3)
#si on avait M =[(1, 1), (5, 6), (1, 0)], on pourrait obtenir [Faux, Faux, Vrai] dans 4)
#car le dernier tuple satisfait les deux conditions : l'un de ses éléments est VRAI
#et tous les éléments ne sont pas VRAI

2voto

theeastcoastwest Points 176

La fonction all() est utilisée pour vérifier si chaque membre d'une collection est vrai ou non. Par exemple, la fonction all() peut être utilisée pour conditionnaliser de manière plus concise des déclarations de la forme suivante :

if all entre's are vegan this is a vegan restaurant

En code :

restaurant_is_vegan = all(x is vegan for x in menu)

Si chaque élément (x) du menu (itérateur) s'évalue à True pour la condition (is vegan; x == vegan), l'instruction all s'évaluera à True.

Plus d'exemples ici : https://www.alpharithms.com/python-all-function-223809/

-1voto

bappi Points 69
liste = [1,1,1,0]
print(any(liste)) # retournera True car il y a un 1 ou un True.
print(all(liste)) # retournera False car il y a un 0 ou un False.
return all(a % i for i in range(3, int(a ** 0.5) + 1)) # lorsque le numéro est divisible, il retournera False sinon retournera True mais toute l'instruction est False.

-1voto

yancheelo Points 33

Je pense qu'il y a quelque chose d'étrange dans la logique de la façon dont any() évalue les conditions. La documentation Python (comme également signalé ici) indique qu'au moins une condition doit être évaluée à True, mais elle ne dit pas que TOUTES les conditions sont évaluées!

Par exemple, j'ai eu des difficultés avec le code ci-dessous, car je pensais que any() n'évaluait pas toutes les conditions:

def compare(list_a, list_b):
    if any([list_a is None, list_b is None, len(list_a) == 0, len(list_b) == 0]):
        return 'pas de comparaison'
    else:
        return 'besoin de comparaison'

print(compare(list_a=None, list_b=[1, 2, 3]))

Le code ci-dessus provoque une exception car any évalue toujours len(list_a) == 0. Dans ce cas, la logique utilisée par any() est TRÈS dangereuse, car j'aurais pensé que seule la première condition est évaluée.

Le code suivant doit être utilisé dans ce cas:

def compare(list_a, list_b):
    if list_a is None or list_b is None or len(list_a) == 0 or len(list_b) == 0:
        return 'pas de comparaison'
    else:
        return 'besoin de comparaison'

print(compare(list_a=None, list_b=[1, 2, 3]))

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