You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表遍历删除异常:无法正确移除偶数编号文件路径

问题原因:遍历列表时删除元素导致索引错位

你遇到的问题本质是在遍历列表的同时直接修改原列表,当删除一个元素后,列表长度缩短,后续元素会向前移位,导致循环跳过了部分元素,所以那些偶数编号的文件没被正确移除。


三种解决方法

方法1:遍历列表的副本

遍历原列表的拷贝,这样原列表的修改不会干扰遍历顺序:

筛选stars文件示例

import copy

stars_paths = copy.deepcopy(file_paths)
# 遍历副本,修改原列表
for file in stars_paths.copy():
    if "stars" not in file:
        stars_paths.remove(file)

print(stars_paths)

移除.json文件示例

csv_file_paths = copy.deepcopy(file_paths)
for file in csv_file_paths.copy():
    if file.endswith(".json"):
        csv_file_paths.remove(file)

print(csv_file_paths)

方法2:列表推导式(推荐)

这是Python中筛选列表最简洁高效的方式,直接生成符合条件的新列表,完全规避遍历删除的问题:

筛选stars文件

stars_paths = [file for file in file_paths if "stars" in file]

保留非.json文件

csv_file_paths = [file for file in file_paths if not file.endswith(".json")]

方法3:反向遍历列表

从列表末尾往前遍历,删除元素时不会影响前面待遍历元素的索引:

筛选stars文件示例

stars_paths = copy.deepcopy(file_paths)
# 从最后一个索引反向遍历到0
for i in range(len(stars_paths)-1, -1, -1):
    if "stars" not in stars_paths[i]:
        del stars_paths[i]

移除.json文件示例

csv_file_paths = copy.deepcopy(file_paths)
for i in range(len(csv_file_paths)-1, -1, -1):
    if csv_file_paths[i].endswith(".json"):
        del csv_file_paths[i]

内容的提问来源于stack exchange,提问作者Radek Raudenský

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:52:51