Ich beziehe mich auf den folgenden Python-Code
%Vor%Ich erwarte, dass der obige Code True zurückgibt, wenn alle Elemente in my_list 2 sind. aber wenn ich my_list leer mache, führe es als
aus %Vor%es gibt auch True zurück. Ich bin mit diesem Verhalten verwirrt. Soll False nicht zurückgegeben werden, da es in my_list kein Element mit dem Wert 2 gibt?
Betrachten Sie eine rekursive Definition von all
:
Wenn jedes Element in L
wahr ist, dann muss es wahr sein, dass sowohl das erste Element in L
wahr ist, und , dass all(L[1:])
wahr ist. Dies ist für eine Liste mit mehreren Elementen leicht zu sehen, aber was ist mit einer Liste mit one -Element. Natürlich ist jeder Gegenstand wahr, wenn der einzige Gegenstand wahr ist, aber wie funktioniert unsere rekursive Formulierung in diesem Fall? Wenn all([])
als wahr definiert wird, funktioniert der Algorithmus.
Eine andere Möglichkeit, es zu betrachten, ist, dass wir für jede Liste L
, für die all(L)
nicht wahr ist, mindestens ein Element, a
, identifizieren können nicht wahr. Allerdings gibt es kein solches a
in L
, wenn L
leer ist, also können wir sagen, dass all([])
wahr ist.
Die gleichen Argumente gelten für any
. Wenn any(L)
wahr ist, sollten wir in der Lage sein, mindestens ein Element in L
zu identifizieren, das wahr ist. Aber da wir für eine leere Liste L
nicht können, können wir sagen, dass any([])
falsch ist. Eine rekursive Implementierung von any
sichert dies ab:
Wenn L[0]
wahr ist, können wir true zurückgeben, ohne jemals den rekursiven Aufruf zu machen, also nehmen wir an, dass L[0]
false ist. Die einzige Möglichkeit, den Basisfall zu erreichen, ist, wenn kein Element von L
wahr ist
Wir müssen False
zurückgeben, wenn wir es erreichen.
"all" auf eine leere Liste angewendet ist "vacuously true", wie leicht zu bestätigen ist:
%Vor%Ähnlich ist "wenn 0 = 1 dann ist der Mond quadratisch" wahr. Ganz allgemein, "alle P sind Q" - wenn es keine P gibt, dann wird die Aussage als wahr betrachtet, da sie formell erfasst werden kann als "Für alle x, wenn x P ist, dann ist x Q". Letztendlich sind diese Wahrheiten wahr, weil der bedingte logische Operator (if-then) immer True ergibt, wenn der Antezedens (die erste Klausel) False ist: "if False then True" ergibt True. Erinnern Sie sich, dass "wenn A dann B" gleich "(nicht A) oder B" ist.
Tags und Links python list-comprehension python-2.7