次の単純なループがループの最後に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
次の単純なループがループの最後に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
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
と私はこれを起こらないようにしますか? –
@NishantSinghあなたは 'range(1,10,3)'のステップを制御できます – Ian
良い答え!ここで重要なのは、テストが行われていないことです。 forループのPythonは、他の言語のループの 'do-test-repeat'ではなく、実際のループ、繰り返しです。 Javaでは、 'each for'ループがあります。これはPythonループに似ています。おそらくそのような名前を付けると、ループがどのように動作するのかが少しはっきりします。 –
[に関する説明](http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686)。 – Ian
それはなぜそんなにうまくいくのでしょうか?これは完全に直感的です。 – Andrey
あなたの変数が "for"に設定されていて、それを印刷します。その出力にしたい場合は "print i + 3" – miguels