Python 有多少种方法可以将元素添加到列表中?哪种方法最快?
当我参加一次工作面试时,我问了一个关于Python的问题:有多少种方法可以将一个元素添加到列表中,哪种方法最快Python 有多少种方法可以将元素添加到列表中?哪种方法最快?,python,list,Python,List,当我参加一次工作面试时,我问了一个关于Python的问题:有多少种方法可以将一个元素添加到列表中,哪种方法最快 我知道我可以使用列表的方法,比如append,insert,当然还有+。那么,还有其他的吗?哪一个最快,为什么?让我们来看看!这是使用ipython的%%timeit魔术功能 In [5]: %%timeit x = [] ...: x = x + [1] ...: 10000 loops, best of 3: 21.5 us per loop In [6]: %%ti
我知道我可以使用列表的方法,比如
append
,insert
,当然还有+
。那么,还有其他的吗?哪一个最快,为什么?让我们来看看!这是使用ipython的%%timeit
魔术功能
In [5]: %%timeit x = []
...: x = x + [1]
...:
10000 loops, best of 3: 21.5 us per loop
In [6]: %%timeit x = []
x.append(1)
...:
1000000 loops, best of 3: 93.7 ns per loop
In [7]: %%timeit x = []
x.insert(0, 1)
...:
100000 loops, best of 3: 30 us per loop
In [8]: %%timeit x = [1,2,3]
x.insert(len(x), 1)
...:
1000000 loops, best of 3: 293 ns per loop
In [9]: %%timeit x = []
x.extend([1])
....:
1000000 loops, best of 3: 208 ns per loop
In [15]: %%timeit x = []
x += [1]
....:
10000000 loops, best of 3: 165 ns per loop
因此append
是最快的,其次是+=
,然后是extend()
,最后是insert
ing。这是因为Python不必创建新列表(如+
)或移动所有元素(如在开头插入)
值得注意的是,x=x+[1]
比x+=[1]
慢200多倍。下次性能真正重要时,请记住这一点
现在,对于附加非常大的列表,这种行为可能会有所不同。区别并没有那么明显:
In [17]: %%timeit y = []
y = y + range(1000000)
....:
10 loops, best of 3: 76.8 ms per loop
In [18]: %%timeit y = []
y += range(1000000)
....:
10 loops, best of 3: 23.4 ms per loop
但在将添加到非常大的列表的情况下肯定是这样的:
In [24]: %%timeit y = range(1000000)
y.append(1)
....:
10000000 loops, best of 3: 92.7 ns per loop
In [29]: %%timeit y = range(1000000)
y.insert(len(y), 1)
....:
1000000 loops, best of 3: 293 ns per loop
In [30]: %%timeit y = range(1000000)
y = y + [1]
....:
100 loops, best of 3: 12.6 ms per loop
这在性能上相差130927次!这就是为什么这是一个面试问题。
+
不会修改原始列表<代码>+=没有+=
与extend
是一样的。追加,或在末尾插入是最快的,并且有O(1)个摊销时间。在列表中除常量结尾以外的任何位置插入都具有O(n)时间复杂度
还请注意,方法查找对性能有非常显著的影响,因此最快的代码实际上是
the_list = []
append = the_list.append
# later...
append(item)
如果需要对同一个列表重复操作。最快的是不复制列表且不需要移动元素的列表。回答不错,我还认为
append
是最快的。那么还有其他方法吗?