2012-04-14 21 views
8

Yaklaşık 40 girişiniz var. list var. Ve sık sık listenin başına bir öğe eklemek istiyorum (id 0 ile) ve listenin last giriş (id 40 ile) delete istiyorum.Listeye giriş yapın ve Python'da ilk listeyi kaldırın

Bunu en iyi nasıl yaparım?

like: (5 girişlerle örnek)

[0] = "herp" 
    [1] = "derp" 
    [2] = "blah" 
    [3] = "what" 
    [4] = "da..." 

"wuggah" ekleme ve son silindikten sonra olması gerektiği gibi:

[0] = "wuggah" 
    [1] = "herp" 
    [2] = "derp" 
    [3] = "blah" 
    [4] = "what" 

veya bir ekleme ve ilk silme.

Ve bunların tümünü bir sonraki girişe tüm girişleri birbiri ardına taşımak için sonlandırmak istemiyorum.

+0

İlan göndermeden önce biraz daha araştırmanızı öneririm .. Cevap, listelere girişin ilk sayfasında tam anlamıyladır. – Mellkor

+2

"Ve tüm bunları bir sonraki kimliğe göre birbiri ardına sırayla taşımak istemiyorum." Dahili olarak, bir liste nesnesi şu anda kullanılan listenin boyutundan daha büyük bir liste ayırır (10 öğe, ancak liste aslında bundan çok daha büyüktür). Bu yüzden sahnenin ardında sizin için her şeyi yapıyor - bu, yerleştirme çalışma zamanını amorti etti, belli bir pozisyonda pop ve diğer mümkün olduğunca düşük çalışır. http://wiki.python.org/moin/TimeComplexity – CppLearner

cevap

7

Kullanım collections.deque:

>>> import collections 
>>> q = collections.deque(["herp", "derp", "blah", "what", "da.."]) 
>>> q.appendleft('wuggah') 
>>> q.pop() 
'da..' 
>>> q 
deque(['wuggah', 'herp', 'derp', 'blah', 'what']) 
+0

Teşekkür ederiz. Bu myList.insert (0, "wuggah") 'ile aynı mıdır? –

+2

@wagglewax Evet, bunun dışında O (n) yerine O (1) işlemidir. –

10

Kullanım insert() listesinin başında bir öğe yerleştirmek için:

myList.insert(0, "wuggah") 

Kullanım pop() kaldırıp Listedeki bir öğeyi döndürmek için. argüman olmadan Pop listesinde

myList.pop() #removes and returns "da..." 
4

Kullanım Burada collections.deque

In [21]: from collections import deque 

In [22]: d = deque([], 3) 

In [24]: for c in '12345678': 
    ....:  d.appendleft(c) 
    ....:  print d 
    ....: 
deque(['1'], maxlen=3) 
deque(['2', '1'], maxlen=3) 
deque(['3', '2', '1'], maxlen=3) 
deque(['4', '3', '2'], maxlen=3) 
deque(['5', '4', '3'], maxlen=3) 
deque(['6', '5', '4'], maxlen=3) 
deque(['7', '6', '5'], maxlen=3) 
deque(['8', '7', '6'], maxlen=3) 
+1

Maksimum uzunluğu kullanmak burada daha iyi bir çözüm, daha zarif, dedi ki, OP, maddeyi eklemek istedim, onu eklemek istemedi - 'deque.appendleft()' '. Düzenlenen. –

1

tek liner, ama muhtemelen bazı diğerlerinin kadar etkili değildir ...

son öğeyi çıkar
myList=["wuggah"] + myList[:-1] 

Ayrıca istediğini olmayabilir yeni bir liste oluşturur unutmayın ...

1
Başka bir yaklaşım
L = ["herp", "derp", "blah", "what", "da..."] 

L[:0]= ["wuggah"] 
L.pop()    
İlgili konular