2015-12-10 6 views
8

मुझे आश्चर्य है कि क्यों पाइथन में डिफ़ॉल्ट list कोई shift, unshift विधियां नहीं है। शायद स्मृति के लिए सूचियों के आदेश के तरीके के लिए एक स्पष्ट कारण है।क्यों पाइथन की सूची में शिफ्ट/अनशिफ्ट विधियां नहीं हैं?

तो वर्तमान में, मुझे पता है कि मैं एक सूची के अंत में एक आइटम जोड़ने के लिए जोड़ सकता हूं और तत्व को निकालने के लिए हटा सकता हूं। हालांकि, मैं केवल लापता shift या unshift विधि के व्यवहार को अपनाने के लिए सूची संयोजन का उपयोग कर सकता हूं।

>>>a = [1,2,3,4,5] 

>>>a.append(6) 
>>>a 
[1,2,3,4,5,6] 

>>>a.pop() 
[1,2,3,4,5] 

>>>a = [0] + a # Unshift/Push 
>>>a 
[0,1,2,3,4,5] 

>>>a = a[1:] # Shift/UnPush 
>>>a 
[1,2,3,4,5] 

क्या मुझे कुछ याद आया?

+8

'पॉप (0)', 'सम्मिलित (0, एक्स)'? –

+0

क्यों? लेखकों से पूछो! – ForceBru

+0

क्या आप इस कोड के साथ प्रदर्शन कर रहे हैं कि आप समर्पित विधियों के बिना आसानी से स्थानांतरित और निर्विवाद कर सकते हैं? – khelwood

उत्तर

17

पायथन सूची को तेज़ निश्चित लंबाई के संचालन के लिए अनुकूलित किया गया था और pop(0) और insert(0, v) संचालन के लिए ओ (एन) स्मृति आंदोलन लागतों को लागू किया गया था जो अंतर्निहित डेटा प्रतिनिधित्व के आकार और स्थिति दोनों को बदलता है।

आप collections.deque में इसके बजाय रुचि रखते हैं, जो एक सूची-जैसे कंटेनर है जो तेजी से संलग्न होता है और किसी भी अंत में पॉप करता है।

डेक्स किसी भी दिशा में लगभग उसी ओ (1) प्रदर्शन के साथ डेक के दोनों ओर से थ्रेड-सुरक्षित, मेमोरी कुशल परिशिष्ट और पॉप का समर्थन करता है।

appendleft(x) 
Add x to the left side of the deque. 

popleft() 
Remove and return an element from the left side of the deque. 
If no elements are present, raises an IndexError. 

बेशक वहाँ एक व्यापार बंद है, और अनुक्रमण या डालने/Deque की बीच पास को हटाने धीमी है: लापता तरीकों के बारे में पूछ होना दिखाई देते हैं नाम appendleft और popleft के तहत प्रदान की जाती हैं । वास्तव में deque.insert(index, object)before Python 3.5 भी संभव नहीं था, आपको घुमाने, डालने/पॉप करने और वापस घूमने की आवश्यकता होगी। आप स्लाइसिंग भी खो देते हैं, इसलिए यदि आपको इसकी आवश्यकता होती है तो आपको कुछ परेशान करना होगा उदा। इसके बजाय itertools.islice

फायदे और deque बनाम list डाटा संरचनाओं का नुकसान की आगे की चर्चा के लिए, देखें How are deques in Python implemented, and when are they worse than lists?

संबंधित मुद्दे