Seite 1 von 1

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

Verfasst: Montag 25. Januar 2016, 14:07
von Noranora
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

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

Verfasst: Montag 25. Januar 2016, 14:13
von Sirius3
@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')]

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

Verfasst: Montag 25. Januar 2016, 23:43
von snafu
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)

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

Verfasst: Dienstag 26. Januar 2016, 00:31
von BlackJack
@snafu: Ich würde sage weder noch:

Code: Alles auswählen

result = list(zip(blumen, farben))

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

Verfasst: Dienstag 26. Januar 2016, 00:39
von snafu
@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()`.

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

Verfasst: Dienstag 26. Januar 2016, 07:36
von bwbg
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]