Python list列表执行reversed()后执行pop()返回迭代对象遍历为空问题

本文主要介绍Python中列表数据先执行reversed()返回迭代器对象,然后在执行reversed()函数之前的列表执行pop()函数,最后返回的迭代器对象循环遍历输出为空的原因及示例代码。

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)总结

所以如果该更改使得列表的状态与创建迭代器时不同,则如果大小减小则什么也不会得到,如果增大则列表不完整。

推荐阅读
cjavapy编程之路首页