Python列表insert方法负索引插入位置不符预期的原因探究
Python列表insert方法负索引的行为解释
当你用Python列表的insert()方法时,别被字面意思误解了——它的参数不是指定元素最终要待的位置,而是指定要插到哪个元素的前面。
拿你的例子来说:
>>> list3 [1, 9, 2, 4, 3, 6, 5, 19, 7] >>> list3.insert(-1, 99) >>> list3 [1, 9, 2, 4, 3, 6, 5, 19, 99, 7]
原列表list3长度为9,最后一个元素7的负索引是-1。调用insert(-1, 99)时,Python会定位到负索引-1对应的元素(也就是7),然后把99插到这个元素的前面,最终99出现在倒数第二个位置,看起来像是“插入到了-2的位置”,但本质是负索引指向的是目标元素,插入操作是在该元素前方执行。
官方文档里“Insert an item at a given position”的描述其实准确,这里的position指的是插入后新元素所在的索引位置:原列表长度为9,insert(-1, 99)等价于insert(8, 99)(因为-1 + len(list3) = 8),插入后99的索引就是8,原来索引8的7被挤到了索引9的位置,完全符合文档定义。
要是你想把元素插到列表末尾,别用insert(-1, item),直接用append(item)或者insert(len(list), item),这两种才是真正把元素放到最后。
内容的提问来源于stack exchange,提问作者Ozicek
相关产品推荐
相关产品推荐

