Ich übe mit der Funktion functools.reduce() mit einer Lambda-Funktion. Das Problem, das ich habe, ist, dass ich immer einen Fehler bekomme. Hier ist mein Code:<lambda>() dauert 1 pos
>>> from functools import reduce
>>> import math
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> reduce((lambda x: math.sqrt(x)), l)
Und hier ist die Ausgabe:
TypeError: <lambda>() takes 1 positional argument but 2 were given
zog ich habe in Klammern, aber nichts scheint zu funktionieren. Aus irgendeinem Grund funktioniert dieser Code nur fein:
>>> from functools import reduce
>>> reduce((lambda x, y: x * y), [1, 2, 3, 4])
24
>>> reduce((lambda x, y: x/y), [1, 2, 3, 4])
0.041666666666666664
aber ich kann keinen Unterschied anders als sehen, dass das zweite Beispiel einen zweiten Parameter y hat. Kann jemand irgendeinen Rat geben, warum ich diesen Fehler bekomme?
Beide Code-Beispiele, die Sie gezeigt haben, machen zwei völlig verschiedene Dinge. Einer erhält die Quadratwurzel seiner Eingabe (verwendet aber fälschlicherweise reduce), während der andere seine Eingabe quadriert (korrekt mit reduce) – smac89
Die integrierte Funktion reduce erwartet als Argument eine andere Funktion von zwei Argumenten. Ihr Lambda hat nur ein Argument. https://docs.python.org/2/library/functions.html#reduce – Apollo2020
Wie @ apollo2020 sagt. Um ** ** zu reduzieren, benötigen Sie eine Funktion, die ** 2 ** Argumente annimmt und sie in einen ** einzigen ** Wert verwandelt. Was genau erwartest du von deinem Output? – schwobaseggl