Logisch and
über alle Elemente in a_list
:
all(a_list)
Logisch or
über alle Elemente in a_list
:
any(a_list)
Wenn Sie sich kreativ fühlen, können Sie auch Folgendes tun:
import operator
def my_all(a_list):
return reduce(operator.and_, a_list, True)
def my_any(a_list):
return reduce(operator.or_, a_list, False)
Denken Sie daran, dass diese nicht im Kurzschluss ausgewertet werden, während die eingebauten sind ;-)
ein anderer lustiger Weg:
def my_all_v2(a_list):
return len(filter(None,a_list)) == len(a_list)
def my_any_v2(a_list):
return len(filter(None,a_list)) > 0
und noch eine:
def my_all_v3(a_list):
for i in a_list:
if not i:
return False
return True
def my_any_v3(a_list):
for i in a_list:
if i:
return True
return False
und wir könnten den ganzen Tag weitermachen, aber ja, der pythonische Weg ist zu benutzen all
und any
:-)
Übrigens hat Python keine Eliminierung der Schwanzrekursion, also versuchen Sie nicht, LISP-Code direkt zu übersetzen ;-)
reduce()
infunctools
Python 3.0ANDing und ORing ist einfach:
NOTing ist auch ziemlich einfach:
Wie Sie diese Ergebnisse verwenden würden, könnte natürlich einige interessante Anwendungen des DeMorgan-Theorems erfordern.
quelle
all(not x for x in some_list)
(aber das ist dasselbe wienot any(some_list)
(ein ganz natürlicher Ausdruck, oder?)).Reduzieren kann dies:
Wie fortran erwähnt hat, ist alles der prägnanteste Weg, dies zu tun. Reduzieren Sie jedoch die Antworten auf die allgemeinere Frage "Wie wende ich einen logischen Operator auf alle Elemente in einer Python-Liste an?"
quelle
reduce
istfunctools.reduce
in Python 3, True
, ist diese Antwort die einzige, die dem Code der Frage für nicht-boolesche Listen tatsächlich entspricht.Die Redewendung für solche Operationen besteht darin, die
reduce
Funktion (global in Python 2.X, im Modulfunctools
in Python 3.X) mit einem geeigneten binären Operator zu verwenden, der entweder aus demoperator
Modul stammt oder explizit codiert ist. In deinem Fall ist esoperator.and_
quelle
Hier ist eine andere Lösung:
Das ANDing aller Elemente gibt True zurück, wenn alle Elemente True sind, daher kein False in einer Liste. ORing ist ähnlich, sollte jedoch True zurückgeben, wenn mindestens ein True-Wert in einer Liste vorhanden ist.
quelle
Wie die anderen Antworten zeigen, gibt es mehrere Möglichkeiten, diese Aufgabe zu erfüllen. Hier ist eine weitere Lösung, die Funktionen aus der Standardbibliothek verwendet:
quelle