Hallo,
ich versuche mich ja langsam von den gewohnten map- und filter-Konstruktionen auf die neueren Möglichkeiten umzustellen. Dabei tauchen natürlich Fragen auf.
Kann man soetwas wie map(lambda a,b: a+b, A, B) auch mit list comprehensions machen, also mehrere Sequenzen elementweise verarbeiten? Wenn ja, wie?
Und gibt es eine Möglichkeit, die reduce-Funktion auf diese Art zu ersetzen? Oder sind die list comprehensions nur ein Ersatz für einfache Fälle von map und filter?
Danke schonmal!
Jörg
List comprehensions mit mehreren Listen?
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi joerg,
um mehrere Listen zu verarbeiten brauchst Du die Funktion zip(), welche aus zwei oder mehreren Listen eine Liste macht, die Tuples mit den Werten aus den Listen enthält. Bei ungleich langen Listen, wird auf die kürzeste abgeschnitten.
reduce lässt sich, soweit ich weiss nicht mit Listcomprehensions nachbilden, da diese immer eine Liste als Ergebniss zurückgeben.
Gruß
Dookie
um mehrere Listen zu verarbeiten brauchst Du die Funktion zip(), welche aus zwei oder mehreren Listen eine Liste macht, die Tuples mit den Werten aus den Listen enthält. Bei ungleich langen Listen, wird auf die kürzeste abgeschnitten.
Code: Alles auswählen
>>> a = [1,2,3,4,5]
>>> b = [7,6,9,4,2]
>>> [x + y for x,y in zip(a,b)]
[8, 8, 12, 8, 7]
Gruß
Dookie
Danke! zip() gehört zu den Funktionen, die ich immer und immer wieder mit "stimmt, das gibt es ja auch" zur Kenntnis nehme, um sie gleich wieder zu verdrängen. ;-(Dookie hat geschrieben: ... um mehrere Listen zu verarbeiten brauchst Du die Funktion zip() ...
Naja, das menschliche Hirn...
Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0