Python列表空格元素删除问题:for循环无法完全清除空格
问题原因及解决方法
为什么循环只删了部分空格?
在遍历列表的同时直接调用remove()修改列表,会导致列表的索引错位。比如原列表前4个都是空格:
- 第一次循环删第一个空格,列表长度从11变成10,原本的第二个空格移到索引0的位置
- 下一次循环会取原索引1的元素(也就是原本的第三个空格),直接跳过了现在索引0的空格
- 按这个逻辑循环下来,开头会剩下一个没被遍历到的空格,后面的空格也因为同样的原因被跳过部分
三种可行的解决方法
方法1:遍历列表的副本
遍历原列表的拷贝,这样修改原列表不会影响遍历的过程:
mylist = [" "," "," "," ","oho","abcd","1234",1234," "," ","omg"] for i in mylist.copy(): if i == ' ': mylist.remove(i) print(mylist) # 输出:['oho', 'abcd', '1234', 1234, 'omg']
方法2:使用列表推导式(推荐)
直接生成过滤后的新列表,这是Python中处理这类需求最简洁高效的方式:
mylist = [" "," "," "," ","oho","abcd","1234",1234," "," ","omg"] mylist = [item for item in mylist if item != ' '] print(mylist)
方法3:倒序遍历原列表
倒着遍历列表的索引,删除元素时不会影响前面还没遍历到的元素:
mylist = [" "," "," "," ","oho","abcd","1234",1234," "," ","omg"] for i in range(len(mylist)-1, -1, -1): if mylist[i] == ' ': del mylist[i] print(mylist)
内容的提问来源于stack exchange,提问作者Not0_0Parsa
相关产品推荐
相关产品推荐

