in for schleife wert ändern

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
ethereal86
User
Beiträge: 5
Registriert: Sonntag 18. Dezember 2005, 19:07

hallo, sry aber ich hab schon wieder ein Problem mit schleifen in python. komm damit einfach nicht klar. wenn ich folgendes habe:

Code: Alles auswählen

a="2"
b="1"
for x in [a,b]:
         x = int(x)
dann weist er das der variable x zu. verständlich, aber in der for schleife zeigt x doch auf a oder b und sollte somit den wert überschreiben. Das tut python aber leider nicht. bin dankbar für jede hilfe
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Was hast du denn vor??? Warum mußt du per Schleife Variablen im Typ ändern müßen??? Das erscheint mir etwas komisch...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
ethereal86
User
Beiträge: 5
Registriert: Sonntag 18. Dezember 2005, 19:07

darum gehts doch gar nicht. Die Frage ist, ob ich den momentan ausgewählten wert ändern kann.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also ich hätte eigentlich genau wie du vermutet das Python das machen würde... Warum das in dem Fall nicht so ist, weiß ich nicht... Was aber auch nicht geht ist:

Code: Alles auswählen

a=[1,2,3]

for x in a:
    x = x+1

print a

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
ethereal86
User
Beiträge: 5
Registriert: Sonntag 18. Dezember 2005, 19:07

aber in diesem fall könnte man mit range arbeiten und dann mit a[x] den wert direkt zuweisen.[/code]
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

ethereal86 hat geschrieben:aber in der for schleife zeigt x doch auf a oder b und sollte somit den wert überschreiben. Das tut python aber leider nicht. bin dankbar für jede hilfe
x ist eine Referenz auf a. Wenn du nun

Code: Alles auswählen

x = was_anderes
schreibst, ist x danach eine Referenz auf was_anderes.

Was gehen würde, ist z.B.

Code: Alles auswählen

a = [1,2,3]
b= [4,5,6]
for x in (a,b): # oder auch [a,b]
  x.append(42)
# a ist [1,2,3,42]
# b ist [4,5,6,42]
Was du machen willst, könnte man so lösen:

Code: Alles auswählen

a,b = map(int,[a,b])
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Code: Alles auswählen

a = "1"
b = "2"
for var in "a", "b":
    locals()[var] = int(locals()[var])
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

blackbird hat geschrieben:

Code: Alles auswählen

a = "1"
b = "2"
for var in "a", "b":
    locals()[var] = int(locals()[var])
Ne, an den Locals werkeln muss nicht unbedigt sein, da ist Joghurts map() Lösung klarer.

Ich hätte noch eine LC:

Code: Alles auswählen

a = '1'
b = '2'
a, b = [int(x) for x in [a, b]]
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

blackbird hat geschrieben:

Code: Alles auswählen

a = "1"
b = "2"
for var in "a", "b":
    locals()[var] = int(locals()[var])
Och bitte. Das ist nicht nur viel komplizierter als eine LC sondern funktioniert auch nicht wirklich. Nur zufällig auf Modulebene -- in Funktionen und Methoden liefert `locals()` eine Kopie und Änderungen haben deshalb keinen Einfluss auf die lokalen Namen.
Antworten