为什么 a.insert(-1, x) 不模仿 a.append(x) ?

5 python list insert append

所以我有以下 Python 代码,它将数字 1-10 添加到列表中values

values = []

for value in range(1, 11):
    values.append(value)

print(values)
Run Code Online (Sandbox Code Playgroud)

并且,正如预期的那样,给了我们[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].

尽管不切实际,但出于好奇,我尝试使用insert()而不是重新创建此结果append()

values = []

for value in range(1, 11):
    values.insert(-1, value)

print(values)
Run Code Online (Sandbox Code Playgroud)

这给了我结果[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]

我也对其他范围进行了尝试,每次都会发生同样的事情:它按升序排列,除了最小的数字位于末尾。

Python文档教程中,我现在知道a.insert(len(a), x)可以用来模仿a.append(x)。但是,我仍然不明白为什么除了最小值之外,将值插入到列表中的最后一个位置是有效的。

cs9*_*s95 3

要理解的基本一点是-1与 不同len(a)。它确实与len(a) - 1

In [396]: x = [1, 2, 3]

In [397]: x[-1]
Out[397]: 3

In [398]: x[len(x) - 1]
Out[398]: 3 
Run Code Online (Sandbox Code Playgroud)

当列表的大小为 1 或更大时,thenlen(a) - 1将始终指向最后一个元素之前的位置(或者从技术上讲,指向最后一个元素当前所在的位置),这就是list.insert放置新项目的位置。

In [400]: x.insert(-1, 4); x
Out[400]: [1, 2, 4, 3]
Run Code Online (Sandbox Code Playgroud)

正如您已经想到的,len(a)指向最后一个元素之后的位置,这是list.append插入元素的位置。因此,-1、 或len(a) - 1将指向最后一个元素的位置,并将list.insert(-1, ...)最后一个元素向右推,并将新元素放置在最后一个元素的旧位置。