29

我可以表演

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

4 回答 4

84

您可以分配给切片:

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]
于 2013-11-01T21:58:33.120 回答
17

这就是你需要的;-)

a = b + a
于 2013-11-01T22:00:39.867 回答
4

你可以使用collections.deque

import collections
a = collections.deque([1, 2, 3])
b = [4, 5, 6]
a.extendleft(b[::-1])
于 2013-11-01T22:01:07.337 回答
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 和红黑树的大多数操作都可以在 O(log(n)) 中完成。据称 Treaps 平均速度更快,但红黑树的操作时间差异较小。

于 2013-11-01T22:59:26.703 回答