Rechenoperationen mit einzelnen Listenelementen (float)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tuple.Turtle
User
Beiträge: 2
Registriert: Montag 2. November 2020, 23:21

Ahoi, hier eine kleine Anfängerfrage.

Für eine Umrechenaufgabe bietet es sich an, ein kleines Programm in Python zu schreiben. Im Wesentlichen soll y=1240/x für verschiedene x-Werte berechnet werden, die ich vorher in einer Liste definiere.

Meine Frage: Wie kann ich Python sagen, dass es für die einzelnen Elemente die oben definierte Aktion (y=1240/x) durchführen soll, ohne die Zahl jedes Mal eingeben oder durch Positionen definieren zu müssen?

Der konkrete Code (habe hier der Einfachheit halber nur 3 x-Werte angegeben):

Code: Alles auswählen

while True:
    x=[9.394199,17.96439,39.7233,59.57]
    x=float
    z=tuple(x)
    y=1240/z
    print(y)
    break
Der Fehler liegt laut Python bei z=tuple(x) :
'type' object is not iterable
Wie man tuple benutzt ist mir noch nicht klar, split funktioniert meines Wissens nach nur für strings...? Ich bin mir jedenfalls mit dem Code insgesamt sehr unsicher, vielleicht kann mir jemand weiterhelfen.

Danke schon einmal im Voraus. ^^
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man etwas für mehrere Werte machen will, braucht man eine Schleife, also hier eine for-Schleife:

Code: Alles auswählen

x = [9.394199,17.96439,39.7233,59.57]
for z in x:
    y = 1240 / z
    print(y)
Benutzeravatar
DeaD_EyE
User
Beiträge: 1205
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Code: Alles auswählen

x = float
z = tuple(x)
Das ist dasselbe wie:

Code: Alles auswählen

z = tuple(float)
Das kann nicht funktionieren und es ergibt auch keinen Sinn.
Die Fehlermeldung weist darauf hin, dass du über ein Type iterieren willst, was nicht geht.
list, tuple, dict, set... usw sind alles Typen.

Code: Alles auswählen

print(type(list))
# type wird ausgegeben

Berechnung durchführen und am Ende die neue Liste ausgeben:

Code: Alles auswählen

values = [9.394199, 17.96439, 39.7233, 59.57]
results = []
for value in values:
    result = 1240 / value
    results.append(result)


print(results)
PS: Nach dem Komma an ein Leerzeichen denken. Ansonsten schleichen sich schnell Fehler ein (z.B. Punkt mit Komma verwechselt).
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Wenn es dir nichts ausmacht die alte Zahlenliste zu überschreiben, geht es auch so:

Code: Alles auswählen

liste=[9.394199,17.96439,39.7233,59.57]

print("Alte Liste: ",liste)
for (index, value) in enumerate(liste):
    liste[index]=1240/value
print("Neue Liste: ", liste)
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

@tonikae: In Python überschreibt man keine Listen, sondern erzeugt neue. Das sollte man sich erst gar nicht angewöhnen.
Dazu kann man dann DEad_Eyes Code auch noch kompakter schreiben:

Code: Alles auswählen

values = [9.394199, 17.96439, 39.7233, 59.57]
results = [1240 / value for value in values]
Tuple.Turtle
User
Beiträge: 2
Registriert: Montag 2. November 2020, 23:21

Danke für die vielen Antworten! ^^

@DeaD_EyE: Du hast recht. x)
@Sirius3: Ach ja wie dumm...natürlich nimmt man eine for-Schleife. Danke für die Erklärungen. :3
@tonikae: Das kann man auch machen, wenn man die Werte nochmal in einer Liste sehen möchte. Laut Sirius3 ist das wohl nicht so sinnvoll fürs Programmieren aber ich danke dir auch für deinen Kommentar. ^^
Zwangsgestörter
User
Beiträge: 20
Registriert: Freitag 23. Oktober 2020, 19:00

Moin,

spricht bei so was dagegen numpy zu verwenden? dann wird das Ganze zu einem einfachen

Code: Alles auswählen

import numpy as np

liste=np.array([9.394199,17.96439,39.7233,59.57])
ergebnis = 1240 / liste

Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Zwangsgestörter hat geschrieben: Freitag 6. November 2020, 11:22 spricht bei so was dagegen numpy zu verwenden?
Für mich persönlich spricht dagegen, dass ich nicht für jeden Kleinkram eine neue Abhängigkeit ins Programm bringen möchte. Wenn es denn ein merklichen Performanceunterschied ausmachen würde und der auch noch relevant wäre, dann würde ich darüber nachdenken.
Benutzeravatar
kbr
User
Beiträge: 1501
Registriert: Mittwoch 15. Oktober 2008, 09:27

Wenn die Liste Millionen von Einträgen hat und Python damit gefühlt (und auch gemessen(!)) zu langsam läuft, dann lohnt sich der Einsatz von numpy. Insbesondere, wenn man mit dem Array anschließend noch was anderes machen möchte.

Das Erzeugen eines Arrays und die Konvertierung zurück zu Python Datentypen kostet auch etwas Zeit. Daher ist die Verwendung von numpy nicht immer sinnvoll, wie sich bei dem vorliegenden Beispiel leicht herausfinden lässt (z.B. mit timeit).
Benutzeravatar
DeaD_EyE
User
Beiträge: 1205
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Zwangsgestörter hat geschrieben: Freitag 6. November 2020, 11:22 spricht bei so was dagegen numpy zu verwenden? dann wird das Ganze zu einem einfachen
Ganz einfach: Der Anfänger lernt dann nicht wie z.B. for-schleifen funktionieren oder was eine list-comprehension ist. Der Anfänger kann das dann nur mit numpy und ist dann ohne numpy aufgeschmissen.
Ist das gleiche wie mit pandas. Jeder meint er müsse den kurzen Weg gehen, scheitert aber schon an den Basics, um z.B. eine Spalte in einen anderen Datentyp umzuwandeln.

Ich nutze auch oft numpy, um mir Schreibarbeit zu ersparen. Aber wenn ich den Code eingebe, habe ich parallel ein Bild davon im Kopf, wie man das nur mit Python machen würde.
Das fehlt den Anfängern, also sollten sie sich erst mal mit Python selbst beschäftigen, anstatt haufenweise Frameworks zu erlernen, die sich später vielleicht nicht benötigen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten