2016-07-30 26 views
0
>>> k = 8 
>>> for i in range(k): 
     print i 
     k -= 3 
     print k 

Über dem ist der Code, der druckt Zahlen von 0-7 wenn ich nur print i in der for-Schleife verwenden.Ändern des Wertes Bereich während der Iteration in Python

Ich möchte den obigen Code verstehen, wie es funktioniert, und gibt es eine Möglichkeit, wie wir den Wert der Variablen in range(variable) aktualisieren können, so dass es anders iteriert.

Auch warum es immer bis zum ursprünglichen Wert k iteriert, warum der Wert nicht aktualisiert wird.

Ich weiß, es ist eine dumme Frage, aber alle Ideen und Kommentare sind willkommen.

Antwort

1

Sie können den Bereich ändern, nachdem es erzeugt worden ist. In Python 2 erstellt range(k) eine Liste von ganzen Zahlen von 0 bis k, wie folgt: [0, 1, 2, 3, 4, 5, 6, 7]. Das Ändern von k nachdem die Liste erstellt wurde, wird nichts bewirken.

Wenn Sie die Nummer ändern iterieren, könnten Sie eine while-Schleife verwenden, wie folgt aus:

k = 8 
i = 0 
while i < k: 
    print i 
    k -= 3 
    i += 1 
2

Der Ausdruck range(k) wird nur einmal ausgewertet, nicht bei jeder Iteration. Sie können k nicht festlegen und erwarten, dass sich das range(k) Ergebnis ändert, nein. Von der for statement documentation:

Die Ausdruckliste wird einmal ausgewertet; Es sollte ein iterierbares Objekt ergeben.

können Sie eine while Schleife verwenden stattdessen:

i = 0 
k = 8 
while i < k: 
    print i 
    i += 1 
    k -= 3 

A while Schleife ist neu zu bewerten, den Test bei jeder Iteration. Referenzierung der while statement documentation:

Diese Tests wiederholt den Ausdruck und, wenn es wahr ist, führt die erste Suite

1

Wenn Sie nicht möchten, k verändern und beeinflussen die Schleife Sie sicherstellen müssen, dass Sie über veränderbares Objekt iterieren. Zum Beispiel:

k = list(range(8)) 
for i in k: 
     print(i) 
     k.pop() 
     k.pop() 
     k.pop() 
     print(k) 

Oder alternativ:

k = list(range(8)) 
for i in k: 
     print(i) 
     k[:] = k[:-3] 
     print(k) 

Beide werden mit

0 
[0, 1, 2, 3, 4] 
1 
[0, 1] 
+0

dank führen, ich dies bereits versucht. Dies war das erste, nachdem ich herausgefunden habe, dass wir den Wert der Bereichsfunktion nicht mehr ändern können. – bhansa