Seite 1 von 1
Dynamische Listen
Verfasst: Mittwoch 24. Februar 2021, 21:17
von YPython1
Hallo liebes Python Formum!
Ich würde gerne in einer for schleife listen Namen dynamisch vergeben z.B.:
Code: Alles auswählen
liste = ["Größe", "Laenge", "Hoehe", "", "Breite"]
liste2 = [100,20], [20,30],[39, 90],[8,2]
i = 0
for i in range(0,np.shape(liste)[1]-1):
liste[i] = liste2[i]
i = i +1
Da ich weitere Werte anhängen möchte an dies Liste ist dies denk ich mal der einfachste Weg allerdings weiß ich nicht wie ich die Listen mit dem entsprechenden Variablen Namen erstellen kann
So soll es aussehen
Größe = [100,20]
Laenge=[20,30]
Hoehe=[39, 90]
Breite= [8,2]
Danke schonmal im Voraus
Ich denke man kann das bestimmt auch mit Listen in Listen lösen weiß allerdings nicht wie
Re: Dynamische Listen
Verfasst: Mittwoch 24. Februar 2021, 23:47
von Sirius3
Da ist so einiges falsch.
liste2 ist keine Liste, sondern ein Tuple.
Datentypen sollten aber erst gar nicht in Variablennamen vorkommen.
Das i=0 ist unnötig, weil Du in der for-Schleife ja i sofort wieder überschreibst.
Das i = i + 1 ist unnötig, weil Du in der for-Schleife ja i sofort wieder überschreibst.
Um die Länge einer Liste zu bestimmen, ist np.shape wohl das komplizierteste, len wäre das direkteste. Warum willst Du das letzte Element der Liste ignorieren? Über einen Index iteriert man nicht, weil man auch über die Listeneinträge direkt iterieren kann.
Wie willst Du eigentlich den leeren String behandeln?
Was Du suchst, ist ein Wörterbuch.
Code: Alles auswählen
schluessel = ["Größe", "Laenge", "Hoehe", "Breite"]
werte = [100,20], [20,30],[39, 90],[8,2]
parameter = dict(zip(schluessel, werte))
Und dann stellt sich natürlich sofort die Frage, warum Du nicht direkt ein Wörterbuch benutzt:
Code: Alles auswählen
parameter = {
'Größe': [100, 20],
'Laenge': [20, 30],
'Hoehe': [39, 90],
'Breite': [8, 2],
}
Re: Dynamische Listen
Verfasst: Donnerstag 25. Februar 2021, 14:27
von YPython1
Danke schonmal für die schnelle Antwort.
Das war jetzt nur ein Bespiel. Mich würde interessieren oben es möglich ist Listen in der For Schleife dynamisch Namen aus einer Liste zuzuweisen. z.B
Größe = [100, 20 ]
Laenge= [20, 30]
usw.
Denn ich will Mittels append diese dann noch um Eintrage erweitern.
Re: Dynamische Listen
Verfasst: Donnerstag 25. Februar 2021, 14:44
von kbr
Na, das geht doch prima mit Dictionaries:
Das ist auch das beste Vorgehen. Das was Dir vermutlich vorschwebt, das dynamische Erzeugen von Bezeichnern, ist eine
ganz schlechte Idee.
Re: Dynamische Listen
Verfasst: Donnerstag 25. Februar 2021, 14:58
von Sirius3
YPython1 hat geschrieben: Donnerstag 25. Februar 2021, 14:27Das war jetzt nur ein Bespiel.
Und für dieses Beispiel habe ich Dir eine Lösung gezeigt. Wo hast Du damit noch konkrete Probleme, oder was willst die eigentlich machen, wo Du nicht weiter kommst? Je exakter Du Dein Problem beschreibst, desto besser kann man Dir helfen.
Re: Dynamische Listen
Verfasst: Donnerstag 25. Februar 2021, 15:53
von /me
YPython1 hat geschrieben: Donnerstag 25. Februar 2021, 14:27
Mich würde interessieren oben es möglich ist Listen in der For Schleife dynamisch Namen aus einer Liste zuzuweisen. z.B
Theoretisch ja, praktisch ist so ein Ansinnen aber Quatsch weil es zu unwartbarem Code führt. Genau für so etwas gibt es ja Datenstrukturen wie z.B. ein Dictionary, die genau so etwas abbilden können.
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 09:58
von YPython1
Ah ok habe verstanden. In der Schleife werden aber Daten formatiert diese formatierten Daten will ich dann je nach Namen entsprechend in einer Liste mit dem jeweiligen Namen speichern um sie dann nochmals zu formatieren, sodass ich sie dann in eine Datenbank einlesen kann.
Hierfür werden Daten je nach Name aus einem Dataframe ausgelesen.
Diese dann weiterverarbeitet.
Und die neue Liste dann final noch einmal formatiert.
zumindest hatte ich mir das so vorgestellt dafür benötige ich die dynamische Listen.
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 10:18
von kbr
So wie ich das verstehe, kennst Du die Bezeichner der Listen nicht im voraus. Dann könnte ein "defaultdict" (
https://docs.python.org/3/library/colle ... efaultdict) für Deinen Anwendungsfall hilfreich sein..
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 10:28
von Sirius3
Wenn du schon einen Dataframe hast, dann hast du schon eine gute Datenhaltung. Das in Listen umzuspeichern hört sich falsch an. Auch das viele umformatieren, bevor es in einer Datenbank landet, ist komisch.
Kannst du etwas konkreter werden, was du vor hast?
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 10:36
von YPython1
Doch ich kenne die Key Elemente, diese setzen sich aus einer Liste zusammen aber die Value Werte dazu kenne ich nicht.
Code: Alles auswählen
# Formatieren von Aktienkursen
Schlüssel = ["Open", "High", "Low", "Adj Close", "Volume", "Dividends", "Stock Splits"]
i = 0
for i in range(0,np.shape(Schlüssel)[0]-1):
Schlüssel[i]= set(list(zip(list_of_tickers, [Schlüssel[i]]*len(list_of_tickers))))
Schlüssel[i] +"STVal" = stock_values_hist[Index[i]]
Schlüssel[i] + "DB" = np.array((df(STVal[i]).reset_index()).to_numpy().tolist())
i = i +1
#Diesen Teil möchte ich quasi in eine schleife packen
Open = set(list(zip(list_of_tickers, ["Open"]*len(list_of_tickers))))
High = set(list(zip(list_of_tickers, ["High"]*len(list_of_tickers))))
Low = set(list(zip(list_of_tickers, ["Low"]*len(list_of_tickers))))
Adj_Close = set(list(zip(list_of_tickers, ["Adj Close"]*len(list_of_tickers))))
Vol = set(list(zip(list_of_tickers, ["Volume"]*len(list_of_tickers))))
Div = set(list(zip(list_of_tickers, ["Dividends"]*len(list_of_tickers))))
Split = set(list(zip(list_of_tickers, ["Stock Splits"]*len(list_of_tickers))))
Open_stock = stock_values_hist[Open]
High_stock = stock_values_hist[High]
Low_stock = stock_values_hist[Low]
Adj_Close_stock = stock_values_hist[Adj_Close]
Vol_stock = stock_values_hist[Vol]
Div_stock = stock_values_hist[Div]
Split_stock = stock_values_hist[Split]
DB_Open_stock = np.array((df(Open_stock).reset_index()).to_numpy().tolist())
DB_High_stock = (df(High_stock).reset_index()).to_numpy().tolist()
DB_Low_stock = (df(Low_stock).reset_index()).to_numpy().tolist()
DB_Adj_stock = (df(Adj_Close_stock).reset_index()).to_numpy().tolist()
DB_Vol_stock = (df(Vol_stock).reset_index()).to_numpy().tolist()
DB_Div_stock = (df(Div_stock).reset_index()).to_numpy().tolist()
DB_Split_stock = (df(Split_stock).reset_index()).to_numpy().tolist()
hierbei soll der Name der Liste dynamisch sein, sodass wenn neue Faktoren mit einbezogen werden diese einfach nur in der Liste hinzuzufügen sind. Die dazugehörigen Werte sollen dann einzeln in einer Liste stehen ohne die jeweiligen Überschriften, da diese später in einen string umformatiert werden müssen.
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 10:48
von Sirius3
Nein! Nichts von dem Code brauchst du. Keine einzige Zeile. Arbeite mit dem Dataframe direkt.
Daher die Frage: welche Art von Daten hast du, und welche Transformation willst du machen.
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 11:04
von YPython1
habe einen Dataframe mit einer Datumsspalte und den Tickerdaten so wie Open Close usw. darunter stehen also einen Index mit zwei Werten Ticker + Open, Ticker + Close usw. darunter dann die jeweiligen Werte. Diese möchte ich so sortieren, dass die Ticker ein Datum haben und nur noch Open, Close usw. im index steht.
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 11:11
von Sirius3
Kannst du Beispieldaten posten, sowohl was du hast als auch was du willst. Dann verstehe ich es vielleicht besser.
Suchst du etwa sowas wie groupby?
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 11:55
von YPython1
Code: Alles auswählen
Index 0 0 1 ..........
None ABBV ABBV .......
None Open High ........
2015-09-04 00:00:00 60.25 60.94 ......
Sieht quasi so aus
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 11:56
von YPython1
die liste geht natürlich auch nach unten hin noch weiter
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 16:46
von YPython1
Habe es jetzt so gelöst
Code: Alles auswählen
Schlüssel = ["Open", "High", "Low", "Adj Close", "Volume", "Dividends", "Stock Splits"]
Liste = []
Liste2 = []
Liste_DB = []
i = 0
for i in range(0,np.shape(Schlüssel)[0]):
Liste.append(list(zip(list_of_tickers, [Schlüssel[i]]*len(list_of_tickers))))
Liste2.append(stock_values_hist[Liste[i]])
Liste_DB.append(np.array((df(Liste2[i]).reset_index()).to_numpy().tolist()))
Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 17:22
von __blackjack__
Das *muss* ein Troll sein…

Re: Dynamische Listen
Verfasst: Samstag 27. Februar 2021, 18:43
von Sirius3
`np.shape(Schlüssel)[0]` ist das selbe wie `len(Schlüssel)` nur viel komplizierter geschrieben.
Über einen Index iteriert man aber nicht, weil man auch direkt über die Elemente iterieren kann.
Aber was willst Du denn jetzt mit den Daten machen? Warum willst Du unbedingt das schöne Dataframe in Listen packen?
Was ist list_of_tickers oder stock_values_hist?