我看到可以在迭代列表时追加到列表中
lst = [1]
for i in lst:
lst.append(i+1)
print(i)
我可以利用这种行为吗?还是灰心?我注意到set
lst = set([1])
for i in lst:
lst.add(i+1)
print(i)
错误:在迭代过程中更改了大小。
答案 0 :(得分:6)
允许在迭代时追加到列表,因为列表是有序的,因此在迭代过程中追加的行为是可预测的。当队列中的所有其他任务完成时,这对于重试失败的任务很有用,例如:
tasks = ['task1', 'task2']
for task in tasks:
if task == 'task1':
tasks.append('task1-retry')
print(task)
这将输出:
task1
task2
task1-retry
但是集合不是有序的,因此在序列上对其进行迭代时将其添加到集合中具有不确定的效果,因此是不允许的。
答案 1 :(得分:1)
我认为这是行不通的,因为如果列表大小更改了,则(?)循环项也应更改,例如它可能会变成无限循环或内存访问冲突。 这样更好:
list=[1,2,7,5]
list2=[]
for i in list:
list2.append(i+1)
print(i)
list=list+list2
答案 2 :(得分:1)
正如其他人已经说过的那样,您将创建无限循环。但是您可以使用python中的break语句来捕获该问题:https://docs.python.org/2.0/ref/break.html
但是,如果再次遇到中断,则可以将其重写为另一个循环,只要满足您用于break语句的条件,该循环就会在该循环处停止。