Betrachten wir eine rekursive Definition von all
:
def all(L):
if L:
return L[0] and all(L[1:])
else:
???
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 leicht zu sehen für eine Liste mit mehreren Artikeln, aber was ist mit einer Liste mit einen Artikel. Natürlich ist jeder Gegenstand wahr, wenn der einzige Gegenstand wahr ist, aber wie funktioniert unsere rekursive Formulierung in diesem Fall? Wenn Sie all([])
als wahr definieren, funktioniert der Algorithmus.
Ein anderer Weg, um es zu betrachten ist, dass für jede Liste L
für die all(L)
nicht wahr ist, sollten wir a
, zu identifizieren, mindestens ein Element der Lage sein, das nicht wahr ist. Allerdings gibt es keine a
in L
, wenn L
leer ist, so dass wir berechtigt sind zu sagen, dass all([])
wahr ist.
Die gleichen Argumente funktionieren 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 nicht für eine leere Liste L
können, können wir sagen, dass any([])
falsch ist. Eine rekursive Implementierung von any
Rücken auf den Punkt:
def any(L):
if L:
return L[0] or any(L[1:])
else:
return False
Wenn L[0]
wahr ist, können wir true zurück, ohne jemals den rekursiven Aufruf zu machen, so übernehmen L[0]
falsch ist. Die einzige Möglichkeit, den Basisfall zu erreichen, ist, wenn kein Element von L
wahr ist, also wir False
zurückgeben müssen, wenn wir es erreichen.
mögliche Duplikate von [Grund für "alle" und "alle" Ergebnis auf leeren Listen] (http://stackoverflow.com/questions/3275058/reason-for-all-and-any-result-on-empty- Listen) –