Seite 1 von 1

Flatten Lists

Verfasst: Donnerstag 4. März 2021, 21:02
von YPython1
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.

Re: Flatten Lists

Verfasst: Donnerstag 4. März 2021, 21:36
von Sirius3
Wenn Du eine flache Liste haben möchtest, warum verschachtelst Du die dann erst?

Re: Flatten Lists

Verfasst: Donnerstag 4. März 2021, 22:35
von YPython1
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.

Re: Flatten Lists

Verfasst: Donnerstag 4. März 2021, 22:50
von Sirius3
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.

Re: Flatten Lists

Verfasst: Donnerstag 4. März 2021, 23:00
von __blackjack__
@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.

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 08:36
von YPython1
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.

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 08:37
von YPython1
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.

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 09:03
von YPython1
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)  

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 09:35
von Sirius3
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`?

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 12:06
von YPython1
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)] 

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 14:22
von Sirius3
@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)]

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 15:00
von einfachTobi
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.

Re: Flatten Lists

Verfasst: Freitag 5. März 2021, 15:37
von kbr
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.