Seite 1 von 1

Werte in for Schleife ändern

Verfasst: Freitag 21. März 2014, 19:00
von Chiller Royal
Hi,
kann mir einer sagen wie ich in einer for Schleife über eine Liste die einzelnen Werte ändern kann?

Und wieso das hier nicht klappt:

Code: Alles auswählen

>>> list = [1, 2, 3, 4]
>>> for value in list:
	if value == 3:
		value = 4

		
>>> list
[1, 2, 3, 4]


Vielen dank im vorraus :)

Re: Werte in for Schleife ändern

Verfasst: Freitag 21. März 2014, 19:11
von Balmung
Nutze dafür enumerate

Code: Alles auswählen

mylist = [1, 2, 3, 4]
for index, value in enumerate(mylist):
    if value == 3:
        mylist[index] = 4

Re: Werte in for Schleife ändern

Verfasst: Freitag 21. März 2014, 19:23
von Sirius3
@Chiller Royal: Werte werden normalerweise gar nicht geändert. Wenn Du eine Liste mit geänderten Werten haben willst, erzeugst Du eine neue Liste:

Code: Alles auswählen

>>> values = [1, 2, 3, 4]
>>> new_values = [4 if value == 3 else value for value in values]
>>> new_values
[1, 2, 4, 4]
Das hat folgende Vorteile: 1. Du brauchst Dir keine Gedanken darum zu machen, ob irgendwo anders die selbe Liste verwendet wird, aber dort keine Änderungen erwartet werden. 2. Du kannst irgendein iterierbares Objekt als Input nehmen (Dateien, Tuple, Generatoren) 3. Es ist klarer, dass hier etwas Neues entsteht, im anderen Fall muß ich erst die ganze Schleife durchlesen, um mir sicher zu sein, dass sich die Liste ändert oder eben nicht.

PS: Warum Dein Code nicht klappt: Woher »value« in Deiner for-Schleife den Wert hat, weiß Python ja nicht mehr. Wie kann dann ein Ändern des Wertes wieder in die Liste zurückgespiegelt werden.

Re: Werte in for Schleife ändern

Verfasst: Freitag 21. März 2014, 19:24
von BlackJack
Wobei in der Regel in Python eher eine neue Liste erstellt wird:

Code: Alles auswählen

mylist = [1, 2, 3, 4]
mylist = [4 if x == 3 else x for x in mylist]

Re: Werte in for Schleife ändern

Verfasst: Freitag 21. März 2014, 19:35
von Chiller Royal
Okay, vielen dank.
Dann weiß ich jetzt bescheid :)