Nicht verschachtelte Listen flatten mit chain() funzt nicht

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Nicht verschachtelte Listen flatten mit chain() funzt nicht

Beitragvon Hyperion » Dienstag 24. März 2009, 18:47

Hallo zusammen,

ich hab grad nen Brett vorm Kopf:

Code: Alles auswählen

In [57]: list(imap(partial(sample, xrange(10)), (4, 2)))
Out[57]: [[4, 0, 6, 8], [2, 8]]

In [58]: list(chain(imap(partial(sample, xrange(10)), (4, 2))))
Out[58]: [[2, 6, 3, 7], [2, 1]]

Wieso glättet das chain() nicht die beiden Listen? Wie man an [57] erkennt, liefert das imap() doch 2 Listen zurück. Daher sollte das chain doch diese Elemente einzeln zurückgeben.

Ich hätte jetzt folgendes erwartet:

Code: Alles auswählen

[2, 6, 3, 7, 2, 1]


Bin verwirrt :?

Ich verwende Python 2.6 btw.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Beitragvon str1442 » Dienstag 24. März 2009, 19:07

imap() erzeugt einen Iterator über Listen, chain erwartet einzelne Listen als Argument. Du musst als die Argumente mit dem einzelnen Sternchen äh... "unfolden" (Heisst das so? Schwirrte mir grade zu der Sternchen-Syntax im Kopf herum).

Code: Alles auswählen

In [37]: list(chain(*imap(partial(sample, xrange(10)), (4, 2))))
Out[37]: [2, 6, 3, 1, 1, 9]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Beitragvon Hyperion » Dienstag 24. März 2009, 19:22

Ah ... danke Dir!

Ich hab daraufhin mir die Doku noch einmal genau angeguckt und dann direkt darunter ja dies entdeckt:

Code: Alles auswählen

In [82]: list(chain.from_iterable(imap(partial(sample, xrange(10)), (4, 2))))
Out[82]: [3, 8, 1, 2, 5, 6]

mit from_iterables() wird eben genau mein Fall abgedeckt!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder