Versuchen Sie es stattdessen, es funktioniert für Listen jeder Größe:
%Vor% Beachten Sie, dass Ihre vorgeschlagene Lösung mit reduce
nicht für mehr als zwei Elemente funktioniert, da der kumulierte Wert nach dem ersten Vergleich True
ist und Sie True
mit jedem der Elemente aus vergleichen dieser Punkt, und offensichtlich wird das nicht funktionieren.
Sie reduzieren die Listen nicht . Der Rückgabewert Ihres Lambdas ist True
oder False
, der dann als Eingangsparameter für weitere Aufrufe derselben Lambda-Funktion verwendet wird. Sie vergleichen also einen Booleschen Wert mit einer Liste. Daher sollte die reduzierende Funktion denselben Typ wie die Eingabeparameter zurückgeben.
Sie haben wahrscheinlich nach anderen Antworten gesucht: Verwenden Sie all()
.
a = [range(1, 4), range(1, 4), range(1, 4)]
Um reduce(operator.eq, a)
auszuwerten, wird die Funktion reduce
zuerst die Funktion operator.eq
auf den ersten beiden Elementen von a
auswerten, um True
zu erhalten. Dann wird% code_% erneut mit operator.eq
und True
als die beiden Argumente aufgerufen und range(1, 4)
erhalten, was das Endergebnis von False
ist.
Vielleicht wollen Sie:
%Vor%Warum im zweiten Fall ist das Ergebnis falsch
Weil reduce(lambda x, y: x == y, (a, b, c, d))
nicht (a == b) and (b == c) and (c == d)
bedeutet; es bedeutet (((a == b) == c) == d)
. a == b
erzeugt entweder True
oder False
, was dann mit c
verglichen wird.