List comprehensions mit mehreren Listen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

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
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
Dookie
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.

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]
reduce lässt sich, soweit ich weiss nicht mit Listcomprehensions nachbilden, da diese immer eine Liste als Ergebniss zurückgeben.


Gruß

Dookie
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Dookie hat geschrieben: ... um mehrere Listen zu verarbeiten brauchst Du die Funktion zip() ...
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. ;-(

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
Antworten