Moin,
Ich habe das Problem, dass ich mehrere Euro Beträge in einer Liste stehen habe (in diesem Vormat "13,45€") ,als String, und die ganzen beträge der Liste gerne in einen float Wert umgewandelt haben möchte.
Hat da zufällig jemand eine Idee wie ich dieses Problem lösen kann?
bin ganz neu auf dem Gebiet.
Gruß
Liste auslesen und Elemente bearbeiten
Du iterierst mit einer for-Schleife über die Elemente der Liste.
Dann musst du wohl über übel die Zeichenkette bearbeiten und in Format (nicht Vormat) bringen, das du dann mit float() in eine Fließkommazahl casten kannst.
Dann musst du wohl über übel die Zeichenkette bearbeiten und in Format (nicht Vormat) bringen, das du dann mit float() in eine Fließkommazahl casten kannst.
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@andie39: Worauf genau bezieht sich die Frage jetzt?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Teile es in einzelne Aufgaben auf:
- Wie komme ich an den reinen Zahlwert ohne Euro-Zeichen?
- Wie wandle ich eine Zahl vom String in einen Float um?
- Welche Probleme treten bei der Umwandlung womöglich auf?
- Was muss ich am String ändern, damit die Umwandlung klappt?
Und wenn es für dein Beispiel klappt, dann halt noch herausfinden, wie man alle Elemente einer Liste durchgeht und die Schritte anwendet.
Die Lösungen dazu stehen alle im offiziellen Python-Tutorial oder man googelt sie.
- Wie komme ich an den reinen Zahlwert ohne Euro-Zeichen?
- Wie wandle ich eine Zahl vom String in einen Float um?
- Welche Probleme treten bei der Umwandlung womöglich auf?
- Was muss ich am String ändern, damit die Umwandlung klappt?
Und wenn es für dein Beispiel klappt, dann halt noch herausfinden, wie man alle Elemente einer Liste durchgeht und die Schritte anwendet.
Die Lösungen dazu stehen alle im offiziellen Python-Tutorial oder man googelt sie.
Auf die Frage des Threaderstellers.__blackjack__ hat geschrieben: Sonntag 12. Dezember 2021, 18:52 @andie39: Worauf genau bezieht sich die Frage jetzt?
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@andie39: Wird nicht wirklich klarer die Frage.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Schau mal hier:T0m1312 hat geschrieben: Sonntag 12. Dezember 2021, 17:46 Moin,
Ich habe das Problem, dass ich mehrere Euro Beträge in einer Liste stehen habe (in diesem Vormat "13,45€") ,als String, und die ganzen beträge der Liste gerne in einen float Wert umgewandelt haben möchte.
Hat da zufällig jemand eine Idee wie ich dieses Problem lösen kann?
bin ganz neu auf dem Gebiet.
Gruß
Code: Alles auswählen
liste = ["13.25€", "12.50€","105.60€","45.87€"]
liste_neu =[]
for i in liste:
a = float(i.split("€")[0])
liste_neu.append(a)
print(liste_neu)
Ich bin selber ein Frischling:
Daher vorsicht.
Ggf kann ein Profi hier zustimmen oder korrigieren.
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@andie39: Ich finde `split()` nicht so passend, denn man möchte ja eher etwas entfernen und nicht aufteilen. `strip()` bietet sich da IMHO eher an. Und das reicht nicht ganz für das was der Fragesteller da als Ausgangsdaten hat. Die "13,45€" aus dem Beitrag würden mit dem Code noch nicht ganz funktionieren.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Verstehe.__blackjack__ hat geschrieben: Sonntag 12. Dezember 2021, 21:20 @andie39: Ich finde `split()` nicht so passend, denn man möchte ja eher etwas entfernen und nicht aufteilen. `strip()` bietet sich da IMHO eher an. Und das reicht nicht ganz für das was der Fragesteller da als Ausgangsdaten hat. Die "13,45€" aus dem Beitrag würden mit dem Code noch nicht ganz funktionieren.
Man hätte aber ja eine neue Liste die es nicht enthält.
Strip klappt irgendwie nicht richtig bei mir.
Aber Strip funktioniert ja auch mit strings nicht listen oder?
Alternativ wie wäre es mit:
Code: Alles auswählen
liste = ["13.25€", "12.50€","105.60€","45.87€"]
liste_neu =[]
for i in liste:
liste_neu = [s.replace("€", "") for s in liste]
print(liste_neu)
Da ist ja Blödsinn drinandie39 hat geschrieben: Sonntag 12. Dezember 2021, 22:09Verstehe.__blackjack__ hat geschrieben: Sonntag 12. Dezember 2021, 21:20 @andie39: Ich finde `split()` nicht so passend, denn man möchte ja eher etwas entfernen und nicht aufteilen. `strip()` bietet sich da IMHO eher an. Und das reicht nicht ganz für das was der Fragesteller da als Ausgangsdaten hat. Die "13,45€" aus dem Beitrag würden mit dem Code noch nicht ganz funktionieren.
Man hätte aber ja eine neue Liste die es nicht enthält.
Strip klappt irgendwie nicht richtig bei mir.
Aber Strip funktioniert ja auch mit strings nicht listen oder?
Alternativ wie wäre es mit:
Code: Alles auswählen
liste = ["13.25€", "12.50€","105.60€","45.87€"] liste_neu =[] for i in liste: liste_neu = [s.replace("€", "") for s in liste] print(liste_neu)
Es geht doch kürzer:
Code: Alles auswählen
liste = ["13.25€", "12.50€","105.60€","45.87€"]
liste_neu = [s.replace("€", "") for s in liste]
print(liste_neu)
Die Werte liegen ursprünglich nach wie vor in der deutschen Schreibweise vor, also dem Komma als Dezimaltrenner und nicht mit dem Punkt. Die Ausgangsdaten hier einfach anzupassen, geht ja nicht immer. Also muss man da wohl noch einen Schritt einfügen. Floats sind es übrigens auch noch nicht. 

- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@andie39: „Klappt irgendwie nicht richtig bei mir.“ ist keine sinnvolle Fehlerbeschreibung. Bei mir klappt's. Und `replace()` drückt ja auch wieder semantisch nicht das aus was man tatsächlich eigentlich nur machen will. Denn `replace()` ersetzt in der gesamten Zeichenkette. Eigentlich will man ja nur rechts "€" entfernen.
Um letztlich etwas zu bekommen mit dem man rechnen kann, fehlen allerdings noch zwei Schritte, denn es soll ja [13.25, 12.5, 105.6, 45.87] weiterverarbeitet werden.
Code: Alles auswählen
In [81]: [text.rstrip("€") for text in amount_texts]
Out[81]: ['13,25', '12,50', '105,60', '45,87']
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Nun wie gesagt ich bin ja noch ganz am Anfang.__blackjack__ hat geschrieben: Montag 13. Dezember 2021, 04:31 @andie39: „Klappt irgendwie nicht richtig bei mir.“ ist keine sinnvolle Fehlerbeschreibung. Bei mir klappt's. Und `replace()` drückt ja auch wieder semantisch nicht das aus was man tatsächlich eigentlich nur machen will. Denn `replace()` ersetzt in der gesamten Zeichenkette. Eigentlich will man ja nur rechts "€" entfernen.Um letztlich etwas zu bekommen mit dem man rechnen kann, fehlen allerdings noch zwei Schritte, denn es soll ja [13.25, 12.5, 105.6, 45.87] weiterverarbeitet werden.Code: Alles auswählen
In [81]: [text.rstrip("€") for text in amount_texts] Out[81]: ['13,25', '12,50', '105,60', '45,87']
Darum der Hinweis auf die Profis.

Aber ich weiß warum es nicht geklappt hat, siehe Snafu. Ich hatte . statt , als Dezimaltrenner.
So funktioniert dann das hier:
Code: Alles auswählen
liste = ["13,25€", "12,50€","105,60€","45,87€"]
liste_neu =[]
for i in liste:
a = i.strip("€")
liste_neu.append(a)
print(liste_neu)
Du hast Recht, float geht dann aber nicht, weil die Kommata noch da sind.
Also würde ich meinen müsste man die Kommata ersetzen?
Ich habe da mal etwas versucht:
Code: Alles auswählen
liste = ["13,25€", "12,50€","105,60€","45,87€"]
liste_neu =[]
for i in liste:
a = i.strip("€")
liste_neu.append(a)
for i in liste_neu:
liste_neu = [s.replace(",", ".") for s in liste_neu
print(liste_neu)
[/python]
Bekomme jetzt aber einen Syntax Fehler bei printe(liste_neu)
verstehe aber nicht warum…
- pillmuncher
- User
- Beiträge: 1530
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@andie39: Zu jeder öffnenden Klammer gehört eine schließende. Insbesondere bedeutet das, dass die Anzahl der öffnenden und schließenden Klammern gleich sein muss. Und jetzt zähl mal deine Klammern...
In specifications, Murphy's Law supersedes Ohm's.
…..hab es.pillmuncher hat geschrieben: Montag 13. Dezember 2021, 12:36 @andie39: Zu jeder öffnenden Klammer gehört eine schließende. Insbesondere bedeutet das, dass die Anzahl der öffnenden und schließenden Klammern gleich sein muss. Und jetzt zähl mal deine Klammern...

Dann würde ich mal in den Ring werfen:
Jetzt sind in der neuen liste_neu2 alle Werte ohne € und als Float Wert, mit denen man auch rechnen kann.
Code: Alles auswählen
liste = ["13,25€", "12,50€","105,60€","45,87€"]
liste_neu =[]
liste_neu2 =[]
for i in liste:
a = i.strip("€")
liste_neu.append(a)
for i in liste_neu:
liste_neu = [s.replace(",", ".") for s in liste_neu]
for i in liste_neu:
a = float(i)
liste_neu2.append(a)