与Python,我需要在动态当列表遍历一个列表中添加成员:
i = [1,2,3,4,5]
for a in i:
if a == 1:
i.append(100)
print a
难道是保证正常工作?
与Python,我需要在动态当列表遍历一个列表中添加成员:
i = [1,2,3,4,5]
for a in i:
if a == 1:
i.append(100)
print a
难道是保证正常工作?
要更改顺序,而不是迭代器。 该for
循环调用iter()
你遍历对象上,创建一个循环迭代。 对于一个list
对象,创建的列表迭代器保存每个时间到原来的列表的引用和内部指标, for
循环要求下一个项目(调用next()
对迭代器),则返回当前索引处的项和索引递增。
在这种情况下,它是安全的,因为循环迭代对象会很乐意继续在额外的项目。 只要你不将项目添加到i
无止境,循环将完成。
如果你是从删除项目i
,但是,将循环迭代不会看到这些变化,你会得到“令人吃惊”的结果:
i = [1, 2, 3, 4, 5]
for a in i:
if a == 1:
del i[0]
print a
打印:
1
3
4
5
因为循环迭代产量i[1]
上的下一次迭代,这是现在3
,而不是2
。
如果你插入当前迭代指数前项目将出现类似的问题。
您可以创建自己的迭代器,并手动实验,看看会发生什么:
>>> i = [1, 2, 3, 4, 5]
>>> i_iter = iter(i) # index starts at 0
>>> next(i_iter) # now the index is 1
1
>>> del i[0]
>>> i
[2, 3, 4, 5] # item at index 1 is 3
>>> next(i_iter) # returns 3, next index is 2
3
>>> i.insert(0, 1)
>>> i
[1, 2, 3, 4, 5] # item at index 2 is 3
>>> next(i_iter) # returns 3, next index is 3
3