Python列表insert方法索引使用不当导致元素顺序不符问题求助
Python列表insert方法执行逻辑分析
Python中list.insert(index, element)的执行遵循两个固定规则:
- 当传入的
index小于当前列表的长度时,元素会被插入到指定索引位置,原索引及之后的所有元素统一后移一位 - 当传入的
index大于等于当前列表的长度时,元素会直接追加到列表末尾,不会抛出索引相关异常
逐行拆解代码执行过程
初始状态:blist = [],列表长度为0
- 执行
blist.insert(1, "h"):当前列表长度为0,1 >= 0,"h"直接追加到末尾,列表变为["h"],长度为1 - 执行
blist.insert(3, "d"):当前列表长度为1,3 >= 1,"d"直接追加到末尾,列表变为["h", "d"],长度为2 - 执行
blist.insert(2, "q"):当前列表长度为2,2 >= 2,"q"直接追加到末尾,列表变为["h", "d", "q"],长度为3 - 执行
blist.insert(0, "g"):当前列表长度为3,0 < 3,"g"插入到索引0位置,原元素统一后移,列表变为["g", "h", "d", "q"],长度为4 - 执行
blist.insert(4, "k"):当前列表长度为4,4 >= 4,"k"直接追加到末尾,最终列表为["g", "h", "d", "q", "k"],和实际输出一致
问题原因
你的判断是正确的,问题根源就是插入"d"时列表长度不足。insert方法不会为不存在的索引预留位置,超出当前长度的索引都会被判定为追加到末尾,所以"d"实际被插入到了索引1的位置,后续插入"q"时又被追加到了末尾,才导致二者顺序和预期相反。
实现预期输出的方案
如果要得到['g', 'h', 'q', 'd', 'k']的结果,你可以调整插入顺序,优先插入索引值更小的元素,保证插入时目标索引小于当前列表长度:
blist = [] blist.insert(0, "g") blist.insert(1, "h") blist.insert(2, "q") blist.insert(3, "d") blist.insert(4, "k")
执行后即可得到预期结果。
内容的提问来源于stack exchange,提问作者DianaTs2
相关产品推荐
相关产品推荐

