1、示例代码
1)一般情况
s = [1,2,3] t = reversed(s) for i in t: print(i) # 输出: 3,2,1
2) 执行pop()
s = [1,2,3] t = reversed(s) s.pop() for i in t: print(i) # 期望输出 : 2, 1 # 实际什么都没输出:
2、问题原因及示例代码
返回的迭代器本质上需要知道最后一个索引的位置和列表的长度。如果更改了列表的大小,则迭代器将不再起作用。
1)增加列表长度
s = [1,2,3] t = reversed(s) s.append(4) for i in t: print(i) # 输出: [3, 2, 1] #虽然结果不正确,但迭代器会运行
2)减小列表长度然后在增加,保持长度不变
s = [1,2,3] t = reversed(s) s.pop() s.append(4) for i in t: print(i) # 输出: [4, 2, 1]
3)总结
所以如果该更改使得列表的状态与创建迭代器时不同,则如果大小减小则什么也不会得到,如果增大则列表不完整。