Listen zu einer machen

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
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

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?
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.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Das schreit ohnehin eher nach einem namedtuple statt einer Liste.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

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.
Zuletzt geändert von Alfons Mittelmeyer am Dienstag 22. September 2015, 17:42, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

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

Woher stammen denn die einzelnen Listen? Evtl. Kann man schon vorher ansetzen und *direkt* eine vernünftige Struktur erschaffen, anstatt das hinterher zu erledigen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

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?
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Alfons Mittelmeyer: Wenn man schon eine feste Anzahl an Elementen hat, dann kann man auch einfach schreiben:

Code: Alles auswählen

alles = [datum, liste_1, liste_2 ,liste_3, liste_4]
Und über Listenindizes zu iterieren ist in Python so gut wie nie nötig.
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Brauchst Du bei Liste 1 und 2 tatsächlich Strings!? Das sieht nach Zahlenwerten aus. Möglicherweise macht eine Typumwandlung nach Kontext Sinn.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@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.
Zuletzt geändert von Alfons Mittelmeyer am Mittwoch 23. September 2015, 01:00, insgesamt 1-mal geändert.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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))
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@jerch OK, geht also doch anders. Zip kannte ich nur zum Datei komprimieren: Ob es dann auch mit tar.gz geht?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Alfons Mittelmeyer hat geschrieben:Ob es dann auch mit tar.gz geht?
Nur wenn Du Python mit free_associate Flag startest. ;)
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

sau geil. danke euch.
habs gepackt :) :) :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten