Normalerweise verwenden wir map()
in Situationen, in denen wir eine Abfolge von Dingen [1] haben und sie in eine andere Sequenz von gleicher Länge transformieren wollen, indem wir auf jedes Element eine Funktion anwenden.
Sie können es immer noch verwenden, um die Summe der Teiler zu finden, aber ich würde argumentieren, dass es nicht das am besten geeignete Werkzeug dafür ist.
Lassen Sie mich Ihnen stattdessen zeigen, wie wir map
und lambda
auf Ihr Problem anwenden können, indem Sie es aus einem etwas anderen Blickwinkel betrachten.
Zunächst einmal lassen Sie uns Ihre Funktion neu schreiben eine Liste Verständnis zu verwenden:
def DoWork(nums):
sums = []
for n in nums:
divisors = [i for i in range(1, n+1) if not n % i]
sums.append(sum(divisors))
return sums
nun beobachten, dass die divisors
Liste nicht erforderlich ist und beseitigt werden:
def DoWork(nums):
sums = []
for n in nums:
sums.append(sum(i for i in range(1, n+1) if not n % i))
return sums
Jetzt können wir leicht die Transformation gesamte Funktion in einem einzigen Anruf zu map()
:
def DoWork(nums):
return map(lambda n: sum(i for i in range(1, n+1) if not n % i), nums)
[1] map()
kann auch verwendet werden, um mehrere Sequenzen - im Allgemeinen von gleicher Länge - in eine einzelne Sequenz zu transformieren, indem die gleiche Funktion wiederholt auf die Eingabesequenzen angewendet wird.
Lambda-Funktionen sind nicht wie in C++, wo man tatsächlich Variablen erfassen kann ... –
Was soll 'Lambda i: divisors.append (i) wenn nicht (n% i)' bedeuten? – bereal