Flatten Lists

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
YPython1
User
Beiträge: 26
Registriert: Mittwoch 24. Februar 2021, 21:06

Hallo Liebes Python Forum,

bin ziemlich neu was das programmieren mit Python angeht und bekomme es deshalb leider nicht hin einen array mit einer Liste zu verknüpfen, sodass immer das erste Element der Liste dem Array zugeordnet wird.

z.B.

Code: Alles auswählen

 ('MMM', (''1970-02-01'', [10, 20, 30])) 
dies würde ich gerne wie folgt formatieren.

Code: Alles auswählen

('MMM', '1970-02-01', 10, 20, 30)
PS.: Ich füge die auch so jeweils in einander ein mit Hilfe von:

Code: Alles auswählen

Values_DB = np.transpose(np.vstack(Liste_DB)).tolist()
Values_DB = list(zip(DB_stock_hist,Values_DB))
Values_DB = list(zip(Entity_list,Values_DB))
also wenn hier jemand eine Idee hätte wäre ich sehr dankbar und bitte keine for schleife das wird auf mehrere hunderttausend Daten angewandt.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du eine flache Liste haben möchtest, warum verschachtelst Du die dann erst?
YPython1
User
Beiträge: 26
Registriert: Mittwoch 24. Februar 2021, 21:06

Ich will sie ja gerade entschachteln leider bekomme ich dass aber nicht wie gewünscht hin und habe auch keine Idee wie ich das machen soll.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Woher kommen denn Liste_DB, DB_stock_hist und Entity_list?
Wenn das eigentlich zusammengehörige Daten sind, dann sollte man sie erst gar nicht in unterschiedlichen Variablen speichern.
Scheint ja irgendwas mit der Deutschen Bahn zu tun haben. Etwas mehr Kontext wäre schon hilfreich.
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@YPython1: In dem gezeigten Code verschachtelst *Du* da einiges, was Du dann wieder entschachteln willst. Bleibt also die Frage warum Du das Problem erst erzeugst. Würdest Du das nicht tun, bräuchtest Du es nicht lösen.

Als erstes könntest Du mal schauen wie viele Argumente man `zip()` übergeben kann. Schon hast Du ein Problem weniger.

Davon unberührt bleibt die Anmerkung von Sirius3.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
YPython1
User
Beiträge: 26
Registriert: Mittwoch 24. Februar 2021, 21:06

Das sind Daten die in einem Dataframe nebeneinander stehen aber je nach Ausprägung unter einander sein müssen und dann müssen diese, wieder zusammengeführt werden, sodass man sie in eine Datenbank überführen kann.
YPython1
User
Beiträge: 26
Registriert: Mittwoch 24. Februar 2021, 21:06

Man könnte die Daten die ich zipe auch jeweils einzeln Falten und nachdem erst zusammen zipen allerdings ist mir nicht klar wie ich überhaupt Falten soll.
YPython1
User
Beiträge: 26
Registriert: Mittwoch 24. Februar 2021, 21:06

Ich habe s jetzt schonmal so hinbekommen das nur noch ein Tuple mit einem array verbunden werden muss.

Aber ab jetzt hab ich keine Ahnung wie ich das in einen gemeinsamen Tutel packen kann

z.B.

so sieht es jetzt aus:

Code: Alles auswählen

 (('MMM', '1970-02-01'), [100, 20 ,30]) 


und rauskommen soll immer noch

Code: Alles auswählen

  ('MMM', '1970-02-01', 100, 20 ,30)  
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Das sind Daten die in einem Dataframe nebeneinander stehen
Also bist Du schon fertig.

Was meinst Du mit `aber je nach Ausprägung unter einander sein`?
YPython1
User
Beiträge: 26
Registriert: Mittwoch 24. Februar 2021, 21:06

Habe es jetzt wie folgt gelöst:

Code: Alles auswählen

EnDate_DB = tuple(zip(Entity_list, DB_stock_hist))
Values_DB = np.transpose(np.vstack(Liste_DB))
Values_DB = tuple(map(tuple, Values_DB))
DB_Data = [i + j for i, j in zip(EnDate_DB, Values_DB)] 
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@YPython1: wenn Du unsere Fragen nicht beantwortest, kann man Dir halt auch nicht wirklich helfen. Wir haben hoffentlich deutlich gemacht, dass das Problem viel früher zu lösen ist.

Dein "Lösung" ist immer noch deutlich zu kompliziert.
Variablennamen müssen sinnvoll sein, dass Daten irgendwann in eine Datenbank geschrieben werden, ist meist kein Grund, das in den Namen zu schreiben.
Variablennamen werden klein geschrieben und enthalten keine Typen, also Entity_list -> entities, DB_stock_hist -> stock_histories, Liste_DB -> was_auch_immer_das_sein_soll:

Code: Alles auswählen

data = [(entity, stock_history, *values) for entity, stock_history, values in zip(entities, stock_histories, np.vstack(was_auch_immer_das_sein_soll).T)]
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

Meine Fußnägel rollen sich hoch.
1. Blickt bei dem Zerteil- und Zusammenfüg-Wirrwarr doch kein mehr durch und
2. bin ich felsenfest davon überzeugt, dass das nicht der richtige Weg ist und wesentlich eleganter funktioniert.
Ein Auszug aus deinen Daten inkl. Code und gewünschten Eingangs-/Ausgangsformat wären hilfreich.
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

Da Du Deine echten Daten und deren Struktur bislang nicht gezeigt hast, nehme ich mal die Daten, die Du bislang gezeigt hast:

Code: Alles auswählen

items = ('MMM', ('1970-02-01', [10, 20, 30])) 

def flatten(sequence):
    out = []
    for item in sequence:
        # don't flatten other iterables then tuples or lists:
        if isinstance(item, tuple) or isinstance(item, list):
            out.extend(flatten(item))
        else:
            out.append(item)
    return out

flatten(items)
liefert -> ['MMM', '1970-02-01', 10, 20, 30]

Ob das zielführend ist, sei mal dahingestellt. Aber mehr ist von Deinen Daten nicht wirklich bekannt, außer, dass da wohl irgendwie noch ein DataFrame mit dabei sein soll. Dann stehen die Chancen oft gut, dass es schon was Eingebautes gibt.
Antworten