我知道在循环中修改列表是不被允许的,但出于好奇,我想知道为什么以下两个示例的迭代次数会有所不同。
示例1:
x = [1, 2, 3, 4, 5]
for i, s in enumerate(x):
del x[0]
print(i, s, x)
例子2:
x = [1,2,3,4,5]
for i, s in enumerate(x):
x = [1]
print(i, s, x)
示例1仅运行3次,因为当i==3
时,len(x)==2
。
示例2即使len(x)==1
也会运行5次。
所以我的问题是,enumerate
是在循环开始时生成完整的(index, value)
对列表并遍历它吗?还是它们在每次循环迭代时生成?
for
循环不会重新评估迭代器,所以即使你在for
循环内部重新分配了x
,循环仍将使用旧值。显然,如果从列表中删除元素,则循环的迭代次数将减少。 - Bakuriulist(enumerate(...))
。 - John La Rooy