Python列表反转异常:for循环未反转最后2个元素问题排查
问题原因分析
你的代码问题出在遍历原列表的同时修改了它的长度:
- 初始列表
l = [5,7,9,1,8],enumerate(l)生成的迭代器依赖当前列表的状态 - 每次循环执行
l.remove(l[len(l)-1])会直接缩短原列表长度 - 当列表元素被删除后,迭代器的遍历会提前终止:初始列表有5个元素,但循环执行3次后,原列表只剩
[5,7],迭代器没有更多元素可遍历,循环提前停止,最终只添加了3个元素到output
修复方案
方案1:按原列表初始长度循环
直接基于原列表的初始长度循环,避免迭代器受列表修改影响:
l = [5,7,9,1,8] output = [] # 按原列表初始长度循环5次 for _ in range(len(l)): last_element = l[-1] output.append(last_element) l.remove(last_element) print(output) # 输出 [8,1,9,7,5]
方案2:遍历原列表的副本
遍历原列表的副本,原列表的修改不会影响遍历次数:
l = [5,7,9,1,8] output = [] # 遍历原列表的副本,循环次数不受原列表修改影响 for _ in l.copy(): last_element = l[-1] output.append(last_element) l.remove(last_element) print(output) # 输出 [8,1,9,7,5]
内容的提问来源于stack exchange,提问作者mavles
相关产品推荐
相关产品推荐

