Hallo zusammen,
in einem Text-Widget befindet sich in jeder Zeile eine Dezimalzahl, welche ich in eine Liste einlesen möchte. Kann mir jemand sagen, wie der Code dafür aussehen kann? Wie kann ich die einzelnen Zeilen, deren Anzahl variabel sein kann, durchlaufen?
Vielen Dank.
snowflake
Zeilen in Widget Text durchlaufen
@snowflake: Ich würde mir den kompletten Inhalt vom `Text`-Widget geben lassen und den dann in Zeilen aufteilen. Zeichenketten haben da eine passende Methode für. Und über diese Liste mit den Zeileninhalten kann man dann ganz normal iterieren, zum Beispiel mit einer ``for``-Schleife.
Hallo zusammen,
die Methode habe ich jetzt gefunden:
Jetzt habe ich ein anderes Problem. Ich möchte die als String vorhandenen Werte in der Liste in Zahlen umwandel, damit ich mit statistischen Funktionen (mean, stdev, usw.) mit der Liste rechnen kann.
Folgender Code funktioniert nicht:
Kann mir jemand sagen, was ich falsch mache?
Vielen Dank.
snowflake
die Methode habe ich jetzt gefunden:
Code: Alles auswählen
werteliste1=werte.get("1.0","end").split()
Folgender Code funktioniert nicht:
Code: Alles auswählen
for i in range(0,len(werteliste1),1):
werteliste.insert(0,float(werteliste1[i]))
Vielen Dank.
snowflake
@snowflake: `range()` und Indexzugriffe sind hier schon mal ”falsch”. Das macht man in Python nicht so weil man *direkt* über die Elemente von Seqzenzen, wie zum Beispiel Listen, iterieren kann, ohne den Umweg über einen Indexwert. Das ”echte” Problem mit dem Code ist das `werteliste` nicht definiert ist. Und falls Du das machst, dann existieren die Elemente denen Du etwas zuweisen willst nicht.
In Python erstellt man in solchen Fällen einfach eine neue Liste. Zum Beispiel mit der „list comprehension“-Syntax oder mittels `map()`:
In Python 2 lässt man den `list()`-Aufruf weg weil `map()` dort schon eine Liste liefert.
Weder der konkrete Datentyp (`liste`) noch irgendwelche angehängten Nummern haben im Namen etwas zu suchen.
Edit: `insert()` braucht man nur ganz selten und wiederholtes Einfügen an der ersten Stelle sollte man sich komplett verkneifen. Das ist ineffizient. Da würde man eher alle Elemente anhängen und die Liste am Ende dann einmal umdrehen.
In Python erstellt man in solchen Fällen einfach eine neue Liste. Zum Beispiel mit der „list comprehension“-Syntax oder mittels `map()`:
Code: Alles auswählen
werte = [float(x) for x in werte_entry.get('1.0', tk.END).split()]
# oder
werte = list(map(float, werte_entry.get('1.0', tk.END).split()))
Weder der konkrete Datentyp (`liste`) noch irgendwelche angehängten Nummern haben im Namen etwas zu suchen.
Edit: `insert()` braucht man nur ganz selten und wiederholtes Einfügen an der ersten Stelle sollte man sich komplett verkneifen. Das ist ineffizient. Da würde man eher alle Elemente anhängen und die Liste am Ende dann einmal umdrehen.