2013-11-01 17 views
20

BenPython'da listeyi ekleme yerine ekleme öğeleriyle genişletebilir miyim?

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

listesini uzanan ve listenin başlayacak yeni öğeler eklemek için bir eylemi gerçekleştirmek için bir yol var mı gerçekleştirebilir? o önemliyse bu

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

gibi

Ben, sürüm 2.7.5 kullanın.

+3

Neden "b.extend (a)" yapamadınız? – iCodez

+1

@iCodez: Bazen 'a'' 'very_important'' denir ve' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' olarak adlandırılır Eskiyi tutmak ve ikincisini unutmak isteyebilirsiniz. – Peque

cevap

66

Bir dilim atayabilirsiniz:

a[:0] = b 

Demo:

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

Esasen, list.extend()list[len(list):] dilime bir atama olduğunu.

Sadece bu konumdaki boş dilim hitap herhangi bir konumda başka bir liste 'insert' olabilir:

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

Teşekkürler. Bunun en iyi python çözümü olduğunu düşünüyorum. –

+0

Teşekkürler! Bu, a.insert'ten (0, b) daha iyidir. – kakyo

14

Bu Sen collections.deque kullanabilirsiniz Eğer ;-)

a = b + a 
+0

u, karşılık gelen dizi elemanlarını ekleyeceğiz. – magarwal

+1

@magarwal Yalnızca numpy kullanıyorsanız. –

4

gerekenler :

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

Bu, keyfi öğelere erişmeniz gerekmiyorsa en iyi yoldur. listeler eklemek ve eklemek, doğrusal mümkün olan kuadratik algoritmalar elde etme eğilimindedir. – dstromberg

2

Eğer gerekiyorsa hızlı operasyonlar ve, keyfi öğelere erişebilmeniz, bir ipucu ya da kırmızı-siyah ağaç kullanmayı deneyebilmeniz gerekir.

>>> 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 

Budama ve kırmızı-siyah ağaçlardaki çoğu işlem O (log (n)) içinde yapılabilir. Treapslar ortalamada daha hızlıdır, ancak kırmızı-siyah ağaçlar çalışma sürelerinde daha düşük bir varyans verir.