Testen Sie, ob alle Elemente einer Python-Liste False sind


73

Wie kann man 'false' zurückgeben, weil alle Elemente 'false' sind?

Die angegebene Liste lautet:

data = [False, False, False]

Antworten:


141

Verwenden von any:

>>> data = [False, False, False]
>>> not any(data)
True

any gibt True zurück, wenn das iterable einen Wahrheitswert enthält.


5
@ Ajay, zu verwenden all:all(not x for x in data)
falsetru

Hinweis: Dies funktioniert nicht, wenn Sie nicht-boolesche Daten in das Array aufnehmen.
Statisch

@ HaroldSeefeld, Trynot any([0, 0, 0])
Falsetru

3
@HaroldSeefeld wird es, Python kann die Wahrhaftigkeit aller eingebauten Typen
testen

2
0, [], {}, () .. usw. sind alle falsche nicht-boolesche Daten .. :)
Iron Fist

30

Grundsätzlich gibt es zwei Funktionen, die sich mit einem Iterable befassen und True oder False zurückgeben, je nachdem, zu welchen Booleschen Werten Elemente der Sequenz ausgewertet werden.

  1. all(iterable)Gibt True zurück, wenn alle Elemente von iterableals wahre Werte betrachtet werden (wie reduce(operator.and_, iterable)).

  2. any(iterable)Gibt True zurück, wenn mindestens ein Element von iterableein True-Wert ist (wiederum unter Verwendung von Funktionsmaterial reduce(operator.or_, iterable)).

Mit der allFunktion können Sie operator.not_Ihre Liste zuordnen oder einfach eine neue Sequenz mit negierten Werten erstellen und überprüfen, ob alle Elemente der neuen Sequenz wahr sind:

>>> all(not element for element in data)

Mit der anyFunktion können Sie überprüfen, ob mindestens ein Element wahr ist, und dann das Ergebnis negieren, da Sie zurückgeben müssen, Falsewenn es ein wahres Element gibt:

>>> not any(data)

Nach dem Gesetz von De Morgan werden diese beiden Varianten das gleiche Ergebnis anyliefern , aber ich würde die letzte (die verwendet wird ) bevorzugen, da sie kürzer und lesbarer ist (und intuitiv als "es gibt keinen wahren Wert in Daten" verstanden werden kann ") und effizienter (da Sie keine zusätzlichen Sequenzen erstellen).


7
Die any()Lösung stoppt, sobald sie einen wahren Wert findet, und ist daher normalerweise schneller.
Martin Evans

-4

Komm schon, Leute, er hat darum gebeten, True zurückzugeben, ob es True gibt. Das Gleiche sagen, Falsch, wenn alle Falsch sind.

any(data)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.