2013-11-01 5 views
20

私はappendの代わりに要素の先頭にPythonのリストを拡張できますか?

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を使用します。

+3

なぜ 'b.extend(a)'できないのですか? – iCodez

+1

@iCodez: 'a'は' very_important'と呼ばれ、 'b'は' aux'と呼ばれることもあります。あなたは前者を忘れて後者を忘れることができます。 – Peque

答えて

66

あなたはスライスに割り当てることができます。

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] 
+0

ありがとうございます。私はこれが最高のpythonソリューションだと思う。 –

+0

ありがとう!これはa.insert(0、b)より優れています。 – kakyo

14

これはあなたがcollections.dequeを使用することができます;-)

a = b + a 
+0

すると、対応する配列要素が追加されます。 – magarwal

+1

@magarwal numpyを使用している場合のみ。 –

4

必要なものです:

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

これは、任意の要素にアクセスする必要がない場合に最適な方法です。リストの挿入と追加は、線形が可能な二次アルゴリズムを生成する傾向があります。 – dstromberg

2

高速操作が必要な場合あなたは任意の要素にアクセスできる必要があります、トレパや赤黒の木を試してみてください。

>>> 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ツリーのほとんどの操作はO(log(n))で実行できます。トレップは、平均してより早いと言われていますが、赤黒の木は、動作時間のばらつきが小さくなります。

関連する問題