sum_of_squares = lambda L: sum([x**2 for x in L])
#reduce(sum_of_squares,[1])
assert sum_of_squares([2,3,4]) == 29
assert sum_of_squares([]) == 0
assert sum_of_squares([1]) == 1
Was ich auskommentiert habe, ist mein Versuch, mit reduce, ist das nicht das richtige Format? reduzieren (Funktion, Reihenfolge). Nicht sicher, was ich hier falsch macheProbleme bei der Verwendung dieser Funktion
reduzieren nimmt eine Funktion von * zwei Argumente *, keine Funktion, die bereits eine ganze Eingabeliste reduziert. Mit einer Funktion wie 'sum_of_squares', die eine ganze Eingabeliste nimmt und sie selbst reduziert, brauchen Sie nicht 'reduzieren'. – user2357112
Beachten Sie, dass die Reducer-Funktion zwei Argumente haben sollte: das bisherige Ergebnis und den nächsten Wert. Es braucht nicht die ganze Liste. Um die Summe der Quadrate mit 'reduce' zu berechnen, würden Sie' lambda x, y: x + y ** 2' wollen. – jonrsharpe
@jonrsharpe: Nur dass das die erste Zahl nicht quadriert. Während Sie das Problem mit einem 'Start'-Argument patchen könnten, wäre es viel sauberer, 'map' für die Quadraturtransformation und' reduces' für die Summe zu verwenden. – user2357112