遍历列表时追加到列表是否正确?

时间:2018-10-17 10:00:33

标签: python loops for-loop

我看到可以在迭代列表时追加到列表中

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)
  

错误:在迭代过程中更改了大小。

3 个答案:

答案 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语句的条件,该循环就会在该循环处停止。