Seite 1 von 1

List comprehensions mit mehreren Listen?

Verfasst: Mittwoch 26. November 2003, 11:01
von joerg
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

Verfasst: Mittwoch 26. November 2003, 13:05
von Dookie
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

Verfasst: Mittwoch 26. November 2003, 13:14
von joerg
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