は、私がforループを持っていると仮定します。Pythonでforループのインデックスを変更するには?
for i in range(1,10):
if i is 5:
i = 7
が、私はそれが一定の条件を満たしている場合i
を変更したいです。私はこれを試みたが、うまくいかなかった。 どうすればいいですか?
は、私がforループを持っていると仮定します。Pythonでforループのインデックスを変更するには?
for i in range(1,10):
if i is 5:
i = 7
が、私はそれが一定の条件を満たしている場合i
を変更したいです。私はこれを試みたが、うまくいかなかった。 どうすればいいですか?
あなたの特定の例の場合、これは動作します:
for i in range(1, 10):
if i in (5, 6):
continue
しかし、あなたはおそらくwhile
ループを備えたほうが良いでしょう:
i = 1
while i < 10:
if i == 5:
i = 7
# other code
i += 1
for
ループは、変数を割り当てます(この場合はi
)を各反復の開始時にリスト/反復可能な要素の次の要素に追加します。つまり、ループ内で何をしても、i
は次の要素になります。 while
ループにはこのような制限はありません。
この概念はC世界では珍しいことではありませんが、可能であれば避けるべきです。 それにもかかわらず、これは私がそれを実装した方法で、何が起こっているのかがはっきりしていると感じました。そして、あなたは、ループ内の任意の場所をインデックスに前方にスキップするあなたのロジックを置くことができ、そして読者が私を埋め込むのに対し、スキップ変数に注意を払うように知っている= 7は、どこか深い見逃しやすいことができます。
skip = 0
for i in range(1,10):
if skip:
skip -= 1
continue
if i=5:
skip = 2
<other stuff>
スキップはオプションですが、間違いなくこの質問に対する適切な答えはありません。この質問によれば、ループの中を行き来することもできるはずです。受け入れられた答えはwhileループでこれに取り組んだ。 – drum
質問のループが期待どおりに機能しない理由を少し詳しく説明します。
ループ
for i in iterable:
# some code with i
だからfor
ループは一つによって反復可能なものから構成されたイテレータから値を抽出し、自動的に反復子がある場合に認識
iterator = iter(iterable)
while True:
try:
i = next(iterator)
except StopIteration:
break
# some code with i
ため基本的速記であります消耗して停止する。
あなたが見ることができるように、while
ループの各反復で、私は、したがって、i
の値に関係なく、あなたが# some code with i
一部に発行し、他の再割り当ての上書きされます、再割り当てされます。
このため、Pythonのfor
ループはループ変数の永続的な変更には適していないため、ボラティリティの答えで既に説明したように、while
ループに頼るべきです。
'while'ループを使用し、' is'の代わりに '=='を使用します。 –
なぜあなたは反復のインデックスを変更したいですか?これは間違いなく匂いです。 –
私はアセンブリコードインタプリタのようなものを書いています。だから私は実装のために特定の指示にジャンプする必要があります。 – drum