Werte in for Schleife ä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
Chiller Royal
User
Beiträge: 8
Registriert: Freitag 7. März 2014, 16:49

Freitag 21. März 2014, 19:00

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 :)
Benutzeravatar
Balmung
User
Beiträge: 43
Registriert: Sonntag 17. März 2013, 18:36

Freitag 21. März 2014, 19:11

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
»Honk Honk«
Sirius3
User
Beiträge: 10882
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 21. März 2014, 19:23

@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.
Zuletzt geändert von Sirius3 am Freitag 21. März 2014, 19:26, insgesamt 1-mal geändert.
BlackJack

Freitag 21. März 2014, 19:24

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]
Chiller Royal
User
Beiträge: 8
Registriert: Freitag 7. März 2014, 16:49

Freitag 21. März 2014, 19:35

Okay, vielen dank.
Dann weiß ich jetzt bescheid :)
Antworten