假設我有一個循環:如何在Python中更改for循環的索引?
for i in range(1,10):
if i is 5:
i = 7
我想改變i
是否符合一定的條件。我試過但沒有工作。 我該如何解決?
假設我有一個循環:如何在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世界並不罕見,但應儘可能避免。然而,這是我實施它的方式,我覺得很清楚發生了什麼事情。然後,你可以把你的邏輯在索引中環內的任何地方跳躍前進,讀者會知道要注意跳過變量,而嵌入的I = 7深的地方可以很容易被忽略:
skip = 0
for i in range(1,10):
if skip:
skip -= 1
continue
if i=5:
skip = 2
<other stuff>
雖然跳過是一種選擇,但它絕對不是這個問題的恰當答案。根據這個問題,人們也應該能夠循環往復。接受的答案用一個while循環解決了這個問題。 – drum 2016-09-07 21:08:31
關於爲什麼問題中的循環無法按預期工作的更多背景知識。
環路
for i in iterable:
# some code with i
是基本上爲
iterator = iter(iterable)
while True:
try:
i = next(iterator)
except StopIteration:
break
# some code with i
的速記所以for
循環從從由一個可迭代一個構成一個迭代中提取值,並自動時的迭代器是識別用盡並停止。
正如你所看到的,在while
循環我被重新分配的每次迭代,因此的i
值將,無論您在# some code with i
部分發出任何其他再分配的覆蓋。
由於這個原因,Python中的for
循環不適合循環變量的永久更改,您應該使用while
循環代替,如在Volatility的答案中已經演示的那樣。
使用'while'循環,而不是'is'使用'=='。 – 2013-02-09 06:11:24
爲什麼你想改變迭代的索引?這絕對是一種氣味。 – 2013-02-09 06:15:36
我正在寫東西像一個彙編代碼解釋器。所以,由於我的實施,我必須跳到某些指示。 – drum 2013-02-09 06:20:43