Python中如何移除列表内除首个元素外的空字符串?
问题分析与解决
你的代码问题出在my_list.remove("")的行为上:这个方法会移除列表中第一个匹配到的空字符串,哪怕你判断的是my_list[1:]里存在空字符串,执行remove时还是会从列表开头找第一个空串删除,所以第一次循环就把开头的空字符串删掉了,导致最终结果不符合预期。
下面是几种可行的解决方案:
方案1:切片+列表推导式(简洁直观)
直接保留第一个元素,对后续元素过滤掉空字符串后拼接:
my_list = ['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1', ''] my_list = [my_list[0]] + [item for item in my_list[1:] if item != ""] print(my_list)
方案2:倒序遍历删除(原地修改列表)
从后往前遍历索引(跳过第一个元素),遇到空字符串就删除,避免因列表长度变化导致的索引混乱:
my_list = ['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1', ''] # 从最后一个索引开始,遍历到索引1(不包含0) for i in range(len(my_list)-1, 0, -1): if my_list[i] == "": del my_list[i] print(my_list)
方案3:修正原循环逻辑(贴近你的初始思路)
使用index方法指定起始查找位置,找到索引1及之后的空字符串再删除:
my_list = ['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1', ''] while "" in my_list[1:]: # 从索引1开始查找第一个空字符串的位置 empty_idx = my_list.index("", 1) del my_list[empty_idx] print(my_list)
以上三种方法都能得到预期输出:
['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1']
内容的提问来源于stack exchange,提问作者Katrina Marrie
相关产品推荐
相关产品推荐

