Python遍历列表删除字符串类型元素未达预期效果问题求助
问题原因分析
核心问题是遍历列表的同时动态删除列表元素,会导致列表内部索引实时变化,部分元素被跳过遍历。
合并后的初始lista1为:["a","b","c","d",1,2,3,4]
实际执行逻辑:
- 第一次循环取索引0的元素
"a",判定为字符串后删除,列表变为["b","c","d",1,2,3,4] - 第二次循环默认取下一个索引即索引1的元素,直接跳过了当前位于索引0的
"b",取到"c"执行删除 - 第三次循环取索引2的元素,跳过当前位于索引1的
"d",取到数字1,不符合删除条件 - 后续遍历均为数字元素,无删除操作
最终输出结果为["b","d",1,2,3,4],和预期不符。
正确实现方案
方案1:列表推导式生成新列表(首推,性能最优)
直接过滤生成仅包含非字符串元素的新列表即可:
lista1 = ["a","b","c","d"] lista2 = [1,2,3,4] lista1.extend(lista2) lista1 = [i for i in lista1 if type(i) != str] print(lista1)
方案2:倒序遍历原列表删除
如果必须在原列表上做修改,可选择倒序遍历索引,删除操作不会影响未遍历的前序元素索引:
lista1 = ["a","b","c","d"] lista2 = [1,2,3,4] lista1.extend(lista2) for i in range(len(lista1)-1, -1, -1): if type(lista1[i]) == str: del lista1[i] print(lista1)
两种方案最终输出均为[1,2,3,4],符合预期。
内容的提问来源于stack exchange,提问作者recruitprogrammer
相关产品推荐
相关产品推荐

