Wie kann man zwei lIsten zu einer kombinieren, so dass die Elemente abwechselnd vorkommen

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
Noranora
User
Beiträge: 62
Registriert: Donnerstag 21. Januar 2016, 12:51

Hallo!

Ich meine das in etwa so:

Code: Alles auswählen

blumen=[rose, tulpe, nelke, sonnenblume, gänseblume]
farben= [rot, rosa, weiss, gelb, weiss]
ich möchte die Listen so zusammenfassen, dass dort nachher eine Liste steht:

blumen_und_farben=[rose,rot,tulpe, rose, nelke, weiss,sonnenblume, gelb, gänseblume, weiss]
Wie bekomme ich das hin, das müsste doch auch ohen Dictionäry zu machen sein, oder?

LG
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Noranora: wenn Du jeweils zwei zusammengehörige Dinge hast, willst Du sie weder in zwei getrennten Listen, noch in einer Liste hintereinander haben, sondern in einer Liste als Tuple:

Code: Alles auswählen

blumen=["rose", "tulpe", "nelke", "sonnenblume", "gänseblume"]
farben= ["rot", "rosa", "weiss", "gelb", "weiss"]
blumen_und_farben = zip(blumen, farben)
# [('rose', 'rot'), ('tulpe', 'rosa'), ('nelke', 'weiss'), ('sonnenblume', 'gelb'), ('gänseblume', 'weiss')]
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Warum soll es denn kein Dictionary sein?

Aber wenn es wirklich so sein soll wie vom OP gewünscht:

Code: Alles auswählen

from itertools import chain
list(chain.from_iterable(zip(blumen, farben)))
Ohne `itertools`:

Code: Alles auswählen

result = []
for pair in zip(blumen, farben):
    result.extend(pair)
print(result)
BlackJack

@snafu: Ich würde sage weder noch:

Code: Alles auswählen

result = list(zip(blumen, farben))
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@BlackJack
Der OP schrieb, dass er folgendes will:

Code: Alles auswählen

blumen_und_farben=[rose,rot,tulpe, rose, nelke, weiss,sonnenblume, gelb, gänseblume, weiss]
Wenn das exakt so gewünscht ist, dann benötigt man durchaus `chain()` bzw `extend()`.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Die Frage ist auch, ob der OP das wollen soll ;)

Wenn wir davon ausgehen, dass er die Daten serialisieren möchte, dann chain ; in allen anderen Fällen zip. Listen sollten gleichartige Werte enthalten. Pflanzen und (deren) Farben sind zwei Paar Schuhe und sollten als Wertepaare (2-Tupel) aufgefasst werden.

Mal als Pseudo-Haskell Notation:

Code: Alles auswählen

zip :: [a] -> [b] -> [(a, b)]
chain :: [a] -> [b] -> [c]
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Antworten