编辑:当我想修改原始列表时,我知道要迭代列表的副本。然而,我收到的关于在迭代列表时修改列表的错误的唯一解释是“它可能会导致意外的结果”。
考虑以下:
lst = ['a', 'b', 'c', 'd', 'e']
for x in lst:
lst.remove(x)
print(lst)
这是我尝试解释当一个人在迭代列表时修改列表时实际发生的情况。请注意,line2 相当于for i in range(len(lst)):
, 然后len(lst)
每次迭代都会减少 1。
len(lst)
从 5 开始。
When i = 0
, 我们有lst[i] = 'a'
被删除,所以lst = ['b', 'c', 'd', 'e']
. len(lst)
减少到4。
When i = 1
, 我们有lst[i] = 'c'
被删除,所以lst = ['b', 'd', 'e']
len(lst)
减少到3。
When i = 2
, 我们有lst[i] = 'e'
被删除,所以lst = ['b', 'd']
. len(lst)
减少到2。
这是我认为会引发 IndexError 的地方,因为i = 2
不在range(2)
。然而,该程序只是输出['b', 'd']
。是不是因为i
已经“赶上了”len(lst)
?另外,到目前为止我的推理合理吗?