2012-04-14 11 views
8

में पहले व्यक्ति को हटाएं मेरे पास लगभग 40 प्रविष्टियों में से list है। और मैं अक्सर सूची की शुरुआत (आईडी 0 के साथ) में एक आइटम जोड़ना चाहता हूं और last प्रविष्टि (आईडी 40 के साथ) सूची में चाहता हूं।सूची में प्रवेश जोड़ें और पाइथन

मैं यह कैसे कर सकता हूं?

like: (5 प्रविष्टियों के साथ उदाहरण)

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

"wuggah" जोड़ने और पिछले हटाने के बाद यह होना चाहिए की तरह:

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

या एक जोड़कर और पहले हटा रहा है।

और मैं अगली आईडी में सभी प्रविष्टियों के बाद मैन्युअल रूप से उन्हें एक साथ नहीं लेना चाहता हूं।

+0

मैं आप पोस्ट .. जवाब सूची में परिचय के हर पहले पृष्ठ पर सचमुच है से पहले थोड़ा और अनुसंधान सुझाव देते हैं। – Mellkor

+2

"और मैं अगली आईडी में सभी प्रविष्टियों के बाद मैन्युअल रूप से उन्हें एक साथ नहीं लेना चाहता हूं।" आंतरिक रूप से, एक सूची ऑब्जेक्ट वर्तमान में उपयोग की जाने वाली सूची के आकार की तुलना में एक बड़ी सूची आवंटित करता है (10 तत्व, लेकिन सूची वास्तव में उससे बहुत बड़ी है)। तो दृश्य के पीछे यह आपके लिए यह सब कर रहा है - इसने सम्मिलन के चलने का समय बढ़ाया, किसी विशेष स्थिति पर पॉप किया और अन्य जितना संभव हो उतना कम संचालन करता है। http://wiki.python.org/moin/TimeComplexity – CppLearner

उत्तर

7

उपयोग 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

धन्यवाद। क्या यह 'myList.insert (0, "wuggah") जैसा ही है? –

+2

@wagglewax हाँ, सिवाय इसके कि ओ (एन) के बजाय ओ (1) ऑपरेशन है। –

10

उपयोग insert() सूची की शुरुआत में एक आइटम जगह:

myList.insert(0, "wuggah") 

उपयोग pop() हटाने और सूची में किसी आइटम लौटने के लिए। कोई तर्क के साथ पॉप सूची

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

उपयोग 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

अधिकतम लंबाई का उपयोग करना एक बेहतर समाधान है, और अधिक सुरुचिपूर्ण, कहा जाता है कि ओपी आइटम को प्रीपेड करना चाहता था, इसे संलग्न नहीं करना चाहता - आप 'deque.appendleft()' 'चाहते हैं। संपादित। –

1

यहाँ एक एक लाइनर है, लेकिन यह शायद दूसरों से कुछ के रूप में के रूप में कुशल नहीं है ...

में अंतिम आइटम पॉप
myList=["wuggah"] + myList[:-1] 

भी ध्यान रखें कि यह एक नई सूची है, जो नहीं हो सकता है कि आप क्या चाहते बनाता है ...

1

एक और दृष्टिकोण

L = ["herp", "derp", "blah", "what", "da..."] 

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