Seite 1 von 1
Listen kombinieren
Verfasst: Dienstag 29. Juli 2008, 21:23
von nemomuk
Hallo,
stehe gerade auf dem Schlauch...
Wie kann ich aus folgendem:
Code: Alles auswählen
>>> a = ["a" for x in range(5)]
>>> b = ["b" for x in range(5)]
>>> a
['a', 'a', 'a', 'a', 'a']
>>> b
['b', 'b', 'b', 'b', 'b']
Folgendes machen?
['a','b','a','b']
Danke!
Verfasst: Dienstag 29. Juli 2008, 21:50
von birkenfeld
Warum gerade 2-mal "a" und "b"?
Verfasst: Dienstag 29. Juli 2008, 22:00
von numerix
Da gibt es viiiiele Möglichkeiten. Zum Beispiel diese:
Code: Alles auswählen
>>> a = ['a' for x in range(5)]
>>> b = ['b' for x in range(5)]
>>> c = []
>>> for pair in map(None,a,b):
... c.extend(list(pair))
...
>>> c
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Verfasst: Dienstag 29. Juli 2008, 22:01
von Darii
Oder so:
Code: Alles auswählen
In [1]: from itertools import izip
In [2]: def flatzip(a, b):
...: for item in izip(a, b):
...: yield item[0]
...: yield item[1]
...:
In [3]: a = list("a"*5)
In [4]: b = list("b"*5)
In [5]: list(flatzip(a, b))
Out[5]: ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Verfasst: Dienstag 29. Juli 2008, 22:06
von BlackVivi
Darii hat geschrieben:Oder so:
Code: Alles auswählen
from itertools import izip
def flatzip(a, b):
for item in izip(a, b):
yield item[0]
yield item[1]
a = list("a"*5)
b = list("b"*5)
print list(flatzip(a, b))
Oder mit beliebig vielen:
Code: Alles auswählen
from itertools import izip
def flatzip(*args):
for item in izip(*args):
for i in item:
yield i
Verfasst: Dienstag 29. Juli 2008, 22:10
von numerix
Oder - leicht modifiziert - so:
Code: Alles auswählen
>>> a, b, c = ['a']*5, ['b']*5, []
>>> for pair in zip(a,b): c.extend(list(pair))
...
>>> c
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Verfasst: Dienstag 29. Juli 2008, 23:00
von Craven
Edit: Was schreib ich eigentlich.
Verfasst: Dienstag 29. Juli 2008, 23:13
von EyDu
Das Problem möchte auch noch funktional gelöst werden:
Code: Alles auswählen
>>> a = ["a"]*5
>>> b = ["b"]*5
>>> list(reduce(tuple.__add__, zip(a, b)))
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Verfasst: Mittwoch 30. Juli 2008, 05:16
von nemomuk
Da kann ich mir ja jetzt die schönste ruassuchen^^ Ich hatte nur gedacht, es gibt eine vorgefertigte Funktion wie zip, die das automatisch macht.
Vielen Dank!
Verfasst: Mittwoch 30. Juli 2008, 07:42
von bughunter
hier noch eine Möglichkeit - Indizes (i) wollen auch mal benutzt werden
Code: Alles auswählen
c = list()
for i in range(0, len(a)):
c.append(a[i])
c.append(b[i])
>>> c
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Fast schon ein "99 Bottles of Beer" der Thread hier
(
http://99-bottles-of-beer.net)
Gruß
bughunter
Verfasst: Mittwoch 30. Juli 2008, 13:14
von wuf
Eine weitere Variante
Code: Alles auswählen
>>> a = ['a']*5
>>> b = ['b']*5
>>> c = []
>>> for i in xrange(len(a)):
c += a[i]
c += b[i]
>>> c
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Und wenn es nur um Inhalt der beiden Listen a und b, welche diesen Tread auslösten ginge, warum nicht einfach:
Code: Alles auswählen
c = ['a','b']*5
>>> c
['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b']
Gruss wuf