为什么我的删除空格脚本处理相邻空格时总会残留一个?
问题原因
你遇到的问题是遍历列表的同时修改了列表本身的长度,导致迭代逻辑跳过了相邻的空格元素。
举个具体的执行示例:假设你的list1原本为['h', 'e', ' ', ' ', 'l', 'l', 'o']:
- 迭代器第一次取索引0的元素
h,无操作 - 迭代器取索引1的元素
e,无操作 - 迭代器取索引2的元素
(空格),执行remove方法删除该元素,此时列表变为['h', 'e', ' ', 'l', 'l', 'o'],原索引3位置的空格会自动前移到索引2的位置 - 迭代器按顺序移动到下一个索引3,取到元素
l,刚好跳过了刚前移到索引2的空格,最终这个空格就会残留下来
解决方案
你可以用下面几种更安全的方式实现空格删除:
- 方法1:遍历列表的副本修改原列表,避免迭代时长度变化影响遍历逻辑
for i in list1.copy(): if i == " ": list1.remove(i)
- 方法2:用列表推导式直接生成过滤后的新列表,代码更简洁,执行效率更高
list1 = [char for char in list1 if char != " "] list2 = [char for char in list2 if char != " "]
- 方法3:如果你的列表是从字符串转换来的,直接处理原字符串再转列表更方便
# 假设原字符串为str1、str2 list1 = list(str1.replace(" ", "")) list2 = list(str2.replace(" ", ""))
内容的提问来源于stack exchange,提问作者Nicolai Stuart
相关产品推荐
相关产品推荐

