Python中list.remove()异常:移除首尾元素不符合预期
问题:移除列表首尾元素时误删重复项
原始列表:
['12','30','22','06','27','13','23','16','14','20','09','29','23']
执行代码:
dList.remove(dList[0]) dList.remove(dList[-1]) dList.remove(dList[-1])
实际输出:
['30', '22', '06', '27', '13', '16', '14', '20', '09', '29']
预期输出:
['30', '22', '06', '27', '13', '23', '16', '14', '20', '09']
问题根源
list.remove(x)的作用是查找列表中第一个值为x的元素并删除,而非根据索引删除。你的代码执行流程存在逻辑漏洞:
- 第一次
remove(dList[0])正常删除开头的'12'; - 此时列表末尾是'23',执行
remove(dList[-1])时,remove()会找到列表中第一个'23'(原索引6的元素)删掉,而非末尾的'23'; - 第二次执行
remove(dList[-1])时,列表末尾变为'29',删除后就得到了错误结果。
正确实现方式
方法1:切片(推荐)
直接通过切片获取目标子列表,简洁高效且无歧义:
dList = ['12','30','22','06','27','13','23','16','14','20','09','29','23'] dList = dList[1:-2] # 从索引1开始,到倒数第3个元素结束(切片遵循左闭右开规则) print(dList)
方法2:del语句(原地修改)
用del直接删除指定索引的元素,精准定位目标位置:
dList = ['12','30','22','06','27','13','23','16','14','20','09','29','23'] del dList[0] # 删除第一个元素 del dList[-1] # 删除最后一个元素 del dList[-1] # 再次删除最后一个元素 print(dList)
方法3:pop()方法(原地修改)
pop()默认弹出最后一个元素,也可指定索引弹出目标元素:
dList = ['12','30','22','06','27','13','23','16','14','20','09','29','23'] dList.pop(0) # 弹出第一个元素 dList.pop() # 弹出最后一个元素 dList.pop() # 再次弹出最后一个元素 print(dList)
内容的提问来源于stack exchange,提问作者Seminet
相关产品推荐
相关产品推荐

