Seite 1 von 1

in for schleife wert ändern

Verfasst: Samstag 7. Januar 2006, 12:46
von ethereal86
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

Verfasst: Samstag 7. Januar 2006, 12:53
von jens
Was hast du denn vor??? Warum mußt du per Schleife Variablen im Typ ändern müßen??? Das erscheint mir etwas komisch...

Verfasst: Samstag 7. Januar 2006, 13:00
von ethereal86
darum gehts doch gar nicht. Die Frage ist, ob ich den momentan ausgewählten wert ändern kann.

Verfasst: Samstag 7. Januar 2006, 13:31
von jens
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

Verfasst: Samstag 7. Januar 2006, 13:35
von ethereal86
aber in diesem fall könnte man mit range arbeiten und dann mit a[x] den wert direkt zuweisen.[/code]

Re: in for schleife wert ändern

Verfasst: Samstag 7. Januar 2006, 14:04
von Joghurt
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])

Verfasst: Samstag 7. Januar 2006, 15:11
von mitsuhiko

Code: Alles auswählen

a = "1"
b = "2"
for var in "a", "b":
    locals()[var] = int(locals()[var])

Verfasst: Samstag 7. Januar 2006, 21:25
von Leonidas
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]]

Verfasst: Sonntag 8. Januar 2006, 00:45
von 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.