【发布时间】:2015-07-31 04:26:07
【问题描述】:
我肯定不是我想成为的 Python 大师,而且我主要在业余时间学习学习/实验,我很可能会为有经验的用户提出一个微不足道的问题......然而,我真的很想了解,这是一个对我有很大帮助的地方。
现在,在适当的前提下,Python 文档说:
4.6.3。可变序列类型
s.append(x) 将 x 附加到序列的末尾(与 s[len(s):len(s)] = [x])
[...]
s.insert(i, x) 在 i 给定的索引处将 x 插入到 s 中(与 s[i:i] = [x])
此外:
5.1。更多关于列表
list.append(x) 将一个项目添加到列表的末尾。相当于 a[len(a):] = [x].
[...]
list.insert(i, x) 在给定位置插入一个项目。首先 参数是要插入的元素的索引,所以 a.insert(0, x) 在列表的前面插入,a.insert(len(a), x) 等价于 a.append(x)。
所以现在我想知道为什么有两种方法可以做,基本上是同一件事?难道只有一个append/insert(x, i=len(this)) 是可能的(并且更简单),其中i 是一个可选参数,如果不存在,则意味着添加到列表的末尾?
【问题讨论】:
-
append只能插入到末尾。它是insert的特例。 -
append需要恒定时间来运行,insert也需要线性时间来运行;请参阅 Python Wiki 上的 TimeComplexity。 (线性时间,或O(n),表示insert一个值所花费的时间随着列表的大小而变化,而append总是很快。) -
只有一种方法会是一个更简单的 API,但与在中间或前面插入相比,附加到列表通常具有不同的性能特征,请参阅 stackoverflow.com/questions/7776938/python-insert-vs-append。你可以选择只使用插入而不用附加。
-
@thefourtheye :是的,我明白……那为什么不简单地使用
insert将索引参数设为可选呢? -
@Mauris 这将是一个很好的答案。