Heim >Backend-Entwicklung >Python-Tutorial >Wie funktionieren die „any'- und „all'-Funktionen von Python und warum ist mein Tupelvergleich fehlgeschlagen?

Wie funktionieren die „any'- und „all'-Funktionen von Python und warum ist mein Tupelvergleich fehlgeschlagen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-11 04:35:131028Durchsuche

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

Verstehen des Verhaltens aller Funktionen von Python

Alle Funktionen von Python bieten bequeme Möglichkeiten, den Wahrheitsgehalt mehrerer Elemente innerhalb eines Iterables zu beurteilen . any gibt True zurück, wenn ein Element True ist, während all nur dann True zurückgibt, wenn alle Elemente True sind.

any vs. all

Intuitiv kann any als visualisiert werden Reihe logischer ODER-Operatoren (||) und alles als Reihe logischer UND-Operatoren (&&). Dieses Verständnis hilft, ihre Funktionalität zu verdeutlichen:

  • beliebig: Mindestens ein Truthy-Element führt zu einem True-Rückgabewert. Leere Iterables werden als Falsch ausgewertet.
  • all: Nur wenn alle Elemente wahr sind, geben alle True zurück. Auch hier führen leere Iterables zu True.

Kurzschlüsse

Ein wichtiger Aspekt von allem und jedem ist sein Kurzschlussverhalten. Sie bewerten Elemente nacheinander, bis sie das Ergebnis bestimmen können. Diese Optimierung verhindert unnötiges Durchlaufen des gesamten Iterables.

Anwendung im gegebenen Beispiel

Im bereitgestellten Beispiel wollen wir Tupel vergleichen, um festzustellen, ob sich ein Wert unterscheidet und print True in diesem Fall. Die erwartete Ausgabe sollte [False, True, False] sein. Das tatsächlich erhaltene Ergebnis ist jedoch [Falsch, Falsch, Falsch]. Diese Diskrepanz ergibt sich aus dem verwendeten Ausdruck:

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

Der Ausdruck in den Klammern wird nur dann als True ausgewertet, wenn mindestens ein Element im Tupel True ist, aber nicht alle Elemente True sind. Im angegebenen Fall enthält keines der Tupel solche Werte. Daher ist das Ergebnis fälschlicherweise [Falsch, Falsch, Falsch].

Korrekte Implementierung

Um das beabsichtigte Verhalten zu erreichen, könnte man stattdessen den folgenden Ausdruck verwenden:

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

Dieser Ausdruck vergleicht direkt das erste und zweite Element jedes Tupels und gibt True zurück, wenn sie unterschiedlich sind. Als Ergebnis würde die gewünschte Ausgabe von [Falsch, Wahr, Falsch] erhalten.

Das obige ist der detaillierte Inhalt vonWie funktionieren die „any'- und „all'-Funktionen von Python und warum ist mein Tupelvergleich fehlgeschlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn