2016-12-21 4 views
-2

ich eine Liste und wollen ihre ElementePython Looping durch eine Liste und Zuweisen von Werten

list = ['apple','potato'] 

nun ändern, während diese

for i in range(list): 
    list[i] = list[i].capitalize() 

diese funktioniert nicht und ich nur don‘ t erhalten, warum

for i in list: 
    i = i.capitalize() 

ich bin neu zu Python, mein einziger Hintergrund ist C++, so versuche ich immer noch zu Python Stil anzupassen. Wenn diese Art von Frage bereits gestellt wurde, bitte, fühlen Sie sich frei, mich umzuleiten und dieses Thema zu schließen. Vielen Dank!

+5

Weil dies die Liste nicht aktualisiert. Nur die Variable i wird geändert. –

+2

Während Sie die 'for' -Schleife durchlaufen, nimmt die Variable' i' den _value_ jedes Elements in der Liste. Es ist kein _reference_ zu jedem Punkt in der Liste. Es ist eine separate Variable. Wenn Sie es neu zuweisen, beeinflussen Sie nur die Variable "i". – khelwood

+0

Also ist es ein richtiger Wert? – user3002386

Antwort

1

Durch die Zuweisung in der Schleife wird ein neuer Name i innerhalb der for erstellt, der nach jeder Iteration seinen Wert verliert.

Das ist nicht wirklich der Punkt hier aber. Sie können haben die Wirkung bemerkt, wenn Sie mit wandelbar Substrukturen zu tun hatten, die an Ort und Stelle verändert werden kann, das heißt:

l = [[1], [2]]  
for i in l: 
    i.append(2) 

ändert sich entsprechend (Unterliste reflektiert wird erhalten wird 2 angehängt werden erhalten Sie).

In Ihrem Fall haben Sie jedoch str s, die unveränderliche Objekte sind. i.capitalize(), wirkt auf eine str Instanz eine neue Kopie des Wertes, der zugeordnet und dann verloren ist. Es wirkt sich nicht auf die Objekte in der Liste aus.

Der Wert i in for i in container:bezieht sich auf die in der Sequenz enthaltenen Objekte auf. Wenn Sie das Ergebnis i dem Ergebnis i.capitalize() zuweisen, wird sich der Name i jetzt auf die neue großgeschriebene Instanz beziehen, die zurückgegeben wird.

Versuchen Sie nicht, Parallelen zwischen C++ und Python zu zeichnen, ich weiß, dass es manchmal das Lernen leichter macht, aber manchmal kann es Sie aus der Hölle bringen.

Obligatorische Anmerkung: Verwenden Sie list nicht als Name, es maskiert den integrierten Namen list.

+1

Dies könnte helfen: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html# andere Sprachen haben Variablen –

Verwandte Themen