Seite 1 von 2

Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 17:46
von T0m1312
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ß

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 18:07
von sparrow
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.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 18:47
von andie39
Ohne das Euro Symbol?

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 18:52
von __blackjack__
@andie39: Worauf genau bezieht sich die Frage jetzt?

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 19:10
von snafu
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.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 19:32
von andie39
__blackjack__ hat geschrieben: Sonntag 12. Dezember 2021, 18:52 @andie39: Worauf genau bezieht sich die Frage jetzt?
Auf die Frage des Threaderstellers.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 21:14
von __blackjack__
@andie39: Wird nicht wirklich klarer die Frage.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 21:16
von andie39
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ß
Schau mal hier:

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)
Der print-Befehl ist nicht nötig aber er zeigt, dass jetzt in der neuen Liste die Werte stimmen als float und ohne €.

Ich bin selber ein Frischling:
Daher vorsicht.
Ggf kann ein Profi hier zustimmen oder korrigieren.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 21:20
von __blackjack__
@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.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 22:09
von andie39
__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.
Verstehe.
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)

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Sonntag 12. Dezember 2021, 23:14
von andie39
andie39 hat geschrieben: Sonntag 12. Dezember 2021, 22:09
__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.
Verstehe.
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 drin

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 for Schleife war ja sinnlos.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 01:48
von snafu
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. ;)

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 04:31
von __blackjack__
@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.

Code: Alles auswählen

In [81]: [text.rstrip("€") for text in amount_texts]                                   
Out[81]: ['13,25', '12,50', '105,60', '45,87']
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.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 11:33
von andie39
__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.

Code: Alles auswählen

In [81]: [text.rstrip("€") for text in amount_texts]                                   
Out[81]: ['13,25', '12,50', '105,60', '45,87']
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.
Nun wie gesagt ich bin ja noch ganz am Anfang.

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?

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 12:00
von __deets__
Ja, mit der replace Methode zb.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 12:27
von andie39
__deets__ hat geschrieben: Montag 13. Dezember 2021, 12:00 Ja, mit der replace Methode zb.
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…

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 12:36
von pillmuncher
@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...

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 12:46
von andie39
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...
…..hab es. :oops:

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 13:13
von andie39
Dann würde ich mal in den Ring werfen:

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)

Jetzt sind in der neuen liste_neu2 alle Werte ohne € und als Float Wert, mit denen man auch rechnen kann.

Re: Liste auslesen und Elemente bearbeiten

Verfasst: Montag 13. Dezember 2021, 13:17
von sparrow
Jetzt machst du das aber in 3 verschiedenen Schleifen.
Das könnte man auch in einer einzigen tun.