2016-04-15 15 views
0

@ Padraic Cunningham Lassen Sie mich wissen, wenn Sie möchten, dass ich die Frage zu löschen.Iterator in For-Schleife in Python ändern

Ich bin neu in Python. Ich möchte einige Iterator-Werte basierend auf einer Bedingung überspringen. Das ist in C einfach, aber in Python habe ich eine schwere Zeit.

So helfen Sie mir bitte zu verstehen, warum hier der Code 100-mal Schleifen statt 10.

for i in range(100): 
    print i 
    i = i +10 

bearbeiten: Ich verstehe es Option Schritt ist für Schleife ändern Größe. Aber ich bin daran interessiert, die Iterator-Variable dynamisch zu ändern, wie wir es in C tun können. Okay, ich verstehe, for-Schleife ist in Python anders als in C. Einfach zu verwenden ist die while-Schleife, das habe ich in meinem Code gemacht und es hat funktioniert. Danke Gemeinde!

+1

Selbst in C ist es immer eine schlechte Idee, die Iterationsvariable während einer Schleife zu ändern. –

+0

Basierend auf dem Code, den Sie gezeigt haben, sollten Sie die Dokumentation zu [Bereich] lesen (https://docs.python.org/3/library/functions.html#func-range). Schau dir an, was 'Schritt' tut. – idjaw

+0

Ich verstehe, dass ich die Schrittgröße auf 10 ändern kann, aber ich möchte die Schrittgröße während der Laufzeit beliebig ändern, sagen wir mal in 'if conditions'. Ich verstehe auch, dass es eine schlechte Idee ist, die Iterationsvariable zu ändern, aber ich möchte das immer noch tun. – physicist

Antwort

4

Das tun kann für Schleife durch die iterable range(100) geht.

Das Ändern des aktuellen Werts wirkt sich nicht darauf aus, was als nächstes in der iterablen Darstellung angezeigt wird (und in der Tat, Sie könnten eine iterierbare Zahl haben; der nächste Wert ist möglicherweise keine Zahl!).

Option 1 use a while loop:

i = 0 
while i < 100: 
    i += 4 

Option 2, die in Argument Schrittgröße des Bereichs gebaut verwenden:

for i in range(0,100,10): 
     pass 

Dieses Beispiel kann es deutlicher machen, warum Ihre Methode macht nicht viel Sinn:

for i in [1,2,3,4,5,'cat','fish']: 
    i = i + i 
    print i 

Dies ist völlig gültiger Python-Code (String-Addition ist definiert); Das Ändern der Iterablen würde etwas Unintuitives erfordern.

See here for more information on how iterables work, and how to modify them dynamically

+0

danke die while loop hat für mich gearbeitet. Lesen Sie mehr über das Iterator-Konzept in Python. – physicist

1

Verwenden Sie dazu eine while-Schleife. Ändern der Iterator in einer for-Schleife wird nicht die Menge ändern, wenn mal es stattdessen iteriert Sie

i=0 
while i < 100: 
    print i 
    i = i +10 
+0

danke while loop gearbeitet – physicist

0

Wenn Sie diesen Code versuchen, sollte es funktionieren.

for i in range(100)[::10]: 
    print i 

Die [:: 10] funktioniert wie String-Slicing. [erste Position zum Beginnen an: Position bis zum Anhalten: Anzahl der Schritte in jeder Schleife]

Ich habe die ersten beiden Werte nicht verwendet, daher sind diese auf den Standardwert der ersten Position und der letzten Position eingestellt. Ich habe gerade gesagt, es Schritte 10.

1

machen Wenn Sie einen Iterator ändern möchten, können Sie so etwas tun:

iterator= iter(range(100)) 
for i in iterator: 
    print (i) 
    for k in range(9): next(iterator) 

aber kein praktisches Interesse!