所以我有以下 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)
。但是,我仍然不明白为什么除了最小值之外,将值插入到列表中的最后一个位置是有效的。
要理解的基本一点是-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, ...)
最后一个元素向右推,并将新元素放置在最后一个元素的旧位置。