Seite 1 von 1
Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 16:50
von DMD
hallo,
kann mir bitte jemand einen tip geben,
wie ich verschiedene Listen (mit gleicher Syntax)
zu einer machen kann?
Die Listen die ich habe sehen so aus:
Code: Alles auswählen
datum = [['01.09.2015'], ['08.09.2015'], ['11.09.2015'], ['14.09.2015'], ['16.09.2015'], ['22.09.2015'], ['29.09.2015'], ['30.09.2015']]
liste_1 = [['100'], ['15'], ['1'], ['15'], ['15'], ['15'], ['15'], ['15']]
liste_2 = [['500'], ['45'], ['1'], ['45'], ['45'], ['45'], ['45'], ['45']]
liste_3 = [[100.0], [123456.0], [1000.0], [45.0], [8.75], [12.75], [12.0], [10.0]]
liste_4 = [[9.0], [9.0], [4.0], [9.0], [9.0], [9.0], [9.0], [9.0]]
ich versuche das jeweils erste Element einer jeden Liste zu einer neuen Liste in Liste zu machen:
Code: Alles auswählen
liste_gesamt = [['01.09.2015' , '100' , '500' , 100.0 , 9.0] , ['08.09.2015', '15' , '45' , 123456.0 , 9.0 ] , [ ... ] ]
gibt es da eine gute methode?
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 16:53
von BlackJack
@DMD: Also wenn die Elemente in den Listen nicht alle sinnloserweise in einer Liste mit einem Element stecken würde, dann würde ich ja die `zip()`-Funktion verwenden.
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 17:15
von /me
Das schreit ohnehin eher nach einem
namedtuple statt einer Liste.
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 17:37
von Alfons Mittelmeyer
Ist doch einfach: Du machst bei jeder Liste das [ am Anfang und das ] am Ende weg. Dann fügst Du die Listen zusammen mit einem Komma dazwischen und dann machst Du am Anfang und Ende wieder ein [ und ein ] dazu. Und das kannst Du auch per Programm machen, indem Du etwa json benützt.
Die andere Möglichkeit wäre eine Schleife. Du machst eine leere Liste und arbeitest alle Listen in je einer Schleife ab und fügst die Einträge der neuen Liste hinzu.
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 17:41
von Sirius3
@DMD: die Frage ist ja, warum sind das alles Listen mit einelementigen Listen und warum sind das überhaupt 5 getrennte Listen, wenn die Werte eigentlich zusammengehören?
Woher kommen die Listen?
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 17:42
von Hyperion
Woher stammen denn die einzelnen Listen? Evtl. Kann man schon vorher ansetzen und *direkt* eine vernünftige Struktur erschaffen, anstatt das hinterher zu erledigen...
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 17:53
von Alfons Mittelmeyer
Ach so, jetzt habe ich gesehen, Du möchtest eine andere Reihenfolge haben aber auch da ist eine for Schleife eine gute Idee.
Also liste = []
liste.append(datum)
liste.append(liste1)
liste.append(liste2)
liste.append(liste3)
liste.append(liste4)
Und jetzt machst Du zwei for Schleifen mit Index, die erste äußere über die Listenlängen und die zweite über diese Einträge. Das wirst Du ja wohl hinbekommen?
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 18:17
von Sirius3
@Alfons Mittelmeyer: Wenn man schon eine feste Anzahl an Elementen hat, dann kann man auch einfach schreiben:
Und über Listenindizes zu iterieren ist in Python so gut wie nie nötig.
Re: Listen zu einer machen
Verfasst: Dienstag 22. September 2015, 18:57
von pixewakb
Brauchst Du bei Liste 1 und 2 tatsächlich Strings!? Das sieht nach Zahlenwerten aus. Möglicherweise macht eine Typumwandlung nach Kontext Sinn.
Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 00:35
von Alfons Mittelmeyer
@Sirius Ja wenn mann eine feste Anzahl hat, kann man es auch so schreiben. Aber über Listenindizes iterieren muss er schon:
Code: Alles auswählen
liste_gesamt = []
for j in range(len(liste[0])):
inner_list = []
for i in range(len(liste)): inner_list.append(liste[j][i])
liste_gesamt.append(inner_list)
Und wenn Du das meinst: "Und über Listenindizes zu iterieren ist in Python so gut wie nie nötig."
Wenn die Liste anders geordnet wäre, dann könnte man ja mit json.dumps in String wandeln, die Klammern wegschneiden, ein Komma zwischenfügen und dann die Klammern wieder anfügen und mit json.loads wieder in Python wandeln.
Meine Meinung hierzu: solche Tricksereien sollte man besser lassen und es normal mit über Listen iterieren machen.
Und ein solchen Befehl [].join(liste) gibt es nämlich nicht. Also bleibt auch im umgekehrten Fall nicht viel anderes übrig.
Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 01:00
von jerch
@Alfons: Nein muss man hier nicht. Und was soll der Quatsch mit JSON hier?
@DMD:
Code: Alles auswählen
map(lambda x: list(chain.from_iterable(x)), zip(datum, liste_1, liste_2, liste_3, liste_4))
Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 01:07
von Alfons Mittelmeyer
@jerch OK, geht also doch anders. Zip kannte ich nur zum Datei komprimieren: Ob es dann auch mit tar.gz geht?
Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 01:20
von jerch
Alfons Mittelmeyer hat geschrieben:Ob es dann auch mit tar.gz geht?
Nur wenn Du Python mit free_associate Flag startest.

Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 06:37
von Sirius3
@jerch: in diesem Fall kann man sich sogar das zip sparen:
Code: Alles auswählen
map(lambda *a: list(chain.from_iterable(a)), datum, liste_1, liste_2, liste_3, liste_4)
oder wie im anderen Thread, wo auch schon mehrfach die Verwendung von namedtuplen angeregt wurde:
Code: Alles auswählen
StockData = collections.namedtuple('StockData', 'date, whiskey, beer, wine, water')
stocks = map(StockData, *imap(chain.from_iterable, [datum, liste_1, liste_2, liste_3, liste_4]))
Ceterum censeo, wenn man von Anfang an die Daten in eine sinnvolle Struktur packt, braucht man sie hinterher auch nicht so kompliziert konvertieren.
Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 16:48
von DMD
sau geil. danke euch.
habs gepackt

Re: Listen zu einer machen
Verfasst: Mittwoch 23. September 2015, 18:15
von Hyperion
Sirius3 hat geschrieben:
Ceterum censeo, wenn man von Anfang an die Daten in eine sinnvolle Struktur packt, braucht man sie hinterher auch nicht so kompliziert konvertieren.
+1!!!
Aber zu Nachfragen bezüglich der Herkunft schweigt sich der OP ja leider aus...