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)总结
所以如果该更改使得列表的状态与创建迭代器时不同,则如果大小减小则什么也不会得到,如果增大则列表不完整。