我可以使用prepend元素扩展Python中的列表而不是追加吗?

时间:2013-11-01 21:57:43

标签: python list

我可以执行

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

是否可以执行扩展列表并将新项目添加到列表开头的操作?

喜欢这个

a = [1,2,3]
b = [4,5,6]
a.someaction(b)
# a is now [4,5,6,1,2,3]

我使用版本2.7.5,如果它很重要。

4 个答案:

答案 0 :(得分:70)

您可以指定切片:

a[:0] = b

演示:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[:0] = b
>>> a
[4, 5, 6, 1, 2, 3]

基本上,list.extend()是对list[len(list):]切片的赋值。

您可以在任意位置“插入”另一个列表,只需在该位置找到空切片:

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a[1:1] = b
>>> a
[1, 4, 5, 6, 2, 3]

答案 1 :(得分:14)

这就是你所需要的; - )

a = b + a

答案 2 :(得分:4)

您可以使用collections.deque

import collections
a = collections.deque([1, 2, 3])
b = [4, 5, 6]
a.extendleft(b[::-1])

答案 3 :(得分:2)

如果您需要快速操作,您需要能够访问任意元素,请尝试使用treap或红黑树。

>>> import treap as treap_mod
>>> treap = treap_mod.treap()
>>> for i in range(100000):
...    treap[i] = i
...
>>> treap[treap.find_min() - 1] = -1
>>> treap[100]
100

treaps和red-black trees上的大多数操作都可以在O(log(n))中完成。据称Treaps平均速度更快,但红黑树的运行时间变化较小。