我有:
for i in range(2,n):
if(something):
do something
else:
do something else
i = 2 **restart the loop
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.有没有办法重新启动该循环?
谢谢
谷歌Python类| 清单练习 -
给定一个数字列表,返回一个列表,其中所有相邻的==元素已减少为单个元素,因此[1,2,2,3]返回[1,2,3].您可以创建新列表或修改传入列表.
我使用新列表的解决方案是 -
def remove_adjacent(nums):
a = []
for item in nums:
if len(a):
if a[-1] != item:
a.append(item)
else: a.append(item)
return a
Run Code Online (Sandbox Code Playgroud)
这个问题甚至暗示可以通过修改传入的列表来完成.但是,python文档警告不要在使用for循环迭代列表时修改元素.
我想知道除了迭代列表之外我还能尝试什么,以完成这项工作.我不是在寻找解决方案,但也许是一个可以带我走向正确方向的提示.
UPDATE
使用建议的改进更新了上述代码.
使用建议的提示使用while循环执行以下操作 -
def remove_adjacent(nums):
i = 1
while i < len(nums):
if nums[i] == nums[i-1]:
nums.pop(i)
i -= 1
i += 1
return nums
Run Code Online (Sandbox Code Playgroud) 我怎么能在python中这样做:
x = [1,2,3,4,5,6]
for i in x:
if i == 4:
-restart the loop from beginning-
else:
print i
Run Code Online (Sandbox Code Playgroud)
所以这里它将打印到4然后重复循环
如果我收到异常,我正在寻找重启迭代.(...它正在从服务器读取数据,偶尔会得到间歇性的错误代码,在重试时不会重复).
with open(input, 'rb') as f:
r = unicodecsv.reader(f)
for row in r:
code to request some data from server
if response_code == 200:
code to process response
else:
want to restart the iteration for the current row
Run Code Online (Sandbox Code Playgroud)
如果我正在使用while循环,这种事情显然是显而易见的(例如,不要增加数字),但鉴于我在for循环中迭代行,不能想到一种强制重新循环的方式当前迭代的内容.
虽然有很多类似的声音标题帖子(例如如何在python中重启"for"循环? ,Python - 重启for循环的方法,类似于while循环的"continue",python:重启循环 )每个我发现/读取的东西似乎得到了不同的东西(例如,当到达结束时如何重新启动,而不是在某种情况发生时重新启动迭代).
[Python 2.7]