在迭代列表时追加到列表是否正确?

rah*_*hul 5 python loops for-loop

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

lst = [1]
for i in lst:
    lst.append(i+1)
    print(i)
Run Code Online (Sandbox Code Playgroud)

我可以利用这种行为吗?还是灰心?我注意到不能同样说set

lst = set([1])
for i in lst:
    lst.add(i+1)
    print(i)
Run Code Online (Sandbox Code Playgroud)

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

blh*_*ing 6

允许在迭代时追加到列表,因为列表是有序的,因此在迭代过程中追加的行为是可预测的。当队列中的所有其他任务完成时,这对于重试失败的任务很有用,例如:

tasks = ['task1', 'task2']
for task in tasks:
    if task == 'task1':
        tasks.append('task1-retry')
    print(task)
Run Code Online (Sandbox Code Playgroud)

输出:

task1
task2
task1-retry
Run Code Online (Sandbox Code Playgroud)

但是集合不是有序的,因此在顺序迭代集合时将项目添加到集合具有不确定的效果,因此是不允许的。

  • 如果尝试以类似方式更新字典,则会收到相同的错误(“字典大小已更改”)。由于dict是在Python3中排序的,因此这种推理是否也适用于dict? (2认同)