[英]python: restarting a loop
我有:
for i in range(2,n):
if(something):
do something
else:
do something else
i = 2 **restart the loop
但這似乎不起作用。 有沒有辦法重新啟動該循環?
謝謝
您可能需要考慮使用該邏輯適用的不同類型的循環,因為它是最明顯的答案。
也許是:
i=2
while i < n:
if something:
do something
i += 1
else:
do something else
i = 2 #restart the loop
從循環內更改索引變量i
不太可能達到預期效果。 您可能需要使用while
循環,並自己控制循環變量的遞增。 每次圍繞for
循環, i
都會重新分配來自range()
的下一個值。 所以類似於:
i = 2
while i < n:
if(something):
do something
else:
do something else
i = 2 # restart the loop
continue
i += 1
在我的示例中, continue
語句跳回到循環的頂部,跳過該迭代的i += 1
語句。 否則, i
會按照您的預期遞增(與for
循環相同)。
以下是使用生成器的send()
方法的示例:
def restartable(seq):
while True:
for item in seq:
restart = yield item
if restart:
break
else:
raise StopIteration
用法示例:
x = [1, 2, 3, 4, 5]
total = 0
r = restartable(x)
for item in r:
if item == 5 and total < 100:
total += r.send(True)
else:
total += item
只是想發布一個可能更普遍可用的替代方案。 大多數現有解決方案使用循環索引來避免這種情況。 但是你不必使用索引 - 這里的關鍵是與for循環不同,循環變量被隱藏,循環變量被暴露。
您可以使用迭代器/生成器執行非常類似的操作:
x = [1,2,3,4,5,6]
xi = iter(x)
ival = xi.next()
while not exit_condition(ival):
# Do some ival stuff
if ival == 4:
xi = iter(x)
ival = xi.next()
它不是那么干凈,但仍然保留了寫入循環迭代器本身的能力。
通常 ,當您認為要執行此操作時,您的算法是錯誤的,您應該更干凈地重寫它。 你真正想要做的就是使用生成器/協同程序。 但這至少是可能的。
a = ['1', '2', '3']
ls = []
count = False
while ls != a :
print(a[count])
if a[count] != a[-1] :
count = count + 1
else :
count = False
循環時重啟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.