Maison >développement back-end >Tutoriel Python >Comment fonctionnent les fonctions « any » et « all » de Python et pourquoi ma comparaison de tuples a-t-elle échoué ?

Comment fonctionnent les fonctions « any » et « all » de Python et pourquoi ma comparaison de tuples a-t-elle échoué ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-11 04:35:131028parcourir

How Do Python's `any` and `all` Functions Work, and Why Did My Comparison of Tuples Fail?

Comprendre le comportement de toutes les fonctions de Python

Toutes les fonctions de Python fournissent des moyens pratiques d'évaluer la véracité de plusieurs éléments au sein d'un itérable . any renvoie True si un élément est True, tandis que all renvoie True uniquement si tous les éléments sont True.

any vs. all

Intuitivement, any peut être visualisé comme un série d'opérateurs logiques OU (||), et le tout comme une série d'opérateurs logiques ET (&&). Cette compréhension permet de clarifier leur fonctionnalité :

  • any : Au moins un élément Truthy donne une valeur de retour True. Les itérables vides sont évalués à False.
  • all: Ce n'est que lorsque tous les éléments sont Truthy que tous renvoient True. Encore une fois, les itérables vides donnent True.

Court-circuit

Un aspect important de tout et de tous est leur comportement de court-circuit. Ils évaluent les éléments séquentiellement jusqu'à ce qu'ils puissent déterminer le résultat. Cette optimisation évite un parcours inutile de l'ensemble de l'itérable.

Application dans l'exemple donné

Dans l'exemple fourni, nous visons à comparer des tuples pour déterminer si une valeur diffère et imprimez True dans ce cas. Le résultat attendu doit être [False, True, False]. Cependant, le résultat réel obtenu est [Faux, Faux, Faux]. Cet écart provient de l'expression utilisée :

[any(x) and not all(x) for x in zip(*d['Drd2'])]

L'expression entre parenthèses est évaluée à True uniquement si au moins un élément du tuple est True mais que tous les éléments ne sont pas True. Dans le cas fourni, aucun des tuples ne contient de telles valeurs. Par conséquent, le résultat est incorrectement [Faux, Faux, Faux].

Mise en œuvre correcte

Pour obtenir le comportement souhaité, on pourrait utiliser l'expression suivante à la place :

[x[0] != x[1] for x in zip(*d['Drd2'])]

Cette expression compare directement le premier et le deuxième élément de chaque tuple, renvoyant True s'ils diffèrent. En conséquence, le résultat souhaité de [False, True, False] serait obtenu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn