2016-03-03 18 views
10

次の単純なループがループの最後にiの値を保存しないのはなぜですか?Pythonの 'For'ループの動作

for i in range(1, 10): 
    print i 
    i = i + 3 

上記プリント:

1 
2 
3 
4 
5 
6 
7 
8 
9 

しかし、印刷すべきである:

1 
4 
7 
+0

[に関する説明](http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686)。 – Ian

+8

それはなぜそんなにうまくいくのでしょうか?これは完全に直感的です。 – Andrey

+2

あなたの変数が "for"に設定されていて、それを印刷します。その出力にしたい場合は "print i + 3" – miguels

答えて

41

forセットi各繰り返し、オブジェクトから次の値には、反復処理されます。ループ内でiを何に設定しても、その時点では無視されます。 for statement documentationから

スイートは、その後上昇インデックスの順に、反復子によって提供される各アイテムのために一度実行されます。それぞれのアイテムは、割り当ての標準ルールを使用してターゲットリストに割り当てられ、スイートが実行されます。

iは、ここでは、ターゲットリストであり、それは、range(1, 10)物体からの各値が割り当てられます。 iを後で別のものに設定しても、range(1, 10)式の内容は変更されません。

iを変更するループを作成する場合は、代わりにwhileループを使用してください。それは通過条件を毎回、テスト再:

i = 1 
while i < 10: 
    print i 
    i += 3 

しかし、それだけでアップフロント値を生成する、ステップとrange()を使用する方が簡単でしょう。おそらく

for i in range(1, 10, 3): 
    print i 
+0

と私はこれを起こらないようにしますか? –

+15

@NishantSinghあなたは 'range(1,10,3)'のステップを制御できます – Ian

+0

良い答え!ここで重要なのは、テストが行​​われていないことです。 forループのPythonは、他の言語のループの 'do-test-repeat'ではなく、実際のループ、繰り返しです。 Javaでは、 'each for'ループがあります。これはPythonループに似ています。おそらくそのような名前を付けると、ループがどのように動作するのかが少しはっきりします。 –