Python遍历字符串格式浮点值列表删除正值出现漏删,是什么原因?
问题根因
这是遍历列表过程中动态删除元素导致的索引错位,具体逻辑如下:
- 你在遍历列表的同时调用
pop()删除元素,删除后列表长度会自动缩短,被删位置之后的所有元素会向前移动一位,对应索引全部减1。但你的计数变量x仍然按固定步长+1,导致每次删除元素后,下一次循环会直接跳过移动到当前x位置的元素,没有完成检查。
以你漏删的1162.76为例:
原始列表前5位对应索引为:
0: '1367.36'(正值,触发删除)
1: '-9.99'
2: '-1462'
3: '943.48'(正值,触发删除)
4: '1162.76'(正值,漏删)
当你删除索引0的元素后,原索引3的'943.48'移动到索引2,原索引4的'1162.76'移动到索引3。后续计数x累加后跳过了移动到新索引3的'1162.76',最终导致它没有被删除。
正确实现方案
方案1:列表推导式(最推荐,性能最高)
直接生成新列表保留非正值,避免边遍历边修改原列表:
collist5 = [s for s in collist5 if float(s) <= 0]
方案2:倒序遍历删除
如果必须修改原列表,选择从后往前遍历,删除元素不会影响前面未遍历部分的索引:
for i in range(len(collist5)-1, -1, -1): if float(collist5[i]) > 0: collist5.pop(i)
内容的提问来源于stack exchange,提问作者tkirk1222
相关产品推荐
相关产品推荐

