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ý
相关产品推荐
相关产品推荐

