2009-12-19 18 views
23

मैं जानना चाहता हूं कि पाइथन में मूल डेटाटाइप है जो एक निश्चित-लंबाई फीफो बफर की तरह कार्य करता है। उदाहरण के लिए, मैं एक लम्बाई 5 फीफो बफर बनाना चाहता हूं जो सभी शून्यों के साथ शुरू किया गया है। फिर, यह इस प्रकार दिखाई देंगे:एक निश्चित लंबाई के लिए पायथन डेटाटाइप

[0,0,0,0,0]

तब, जब मैं वस्तु पर डाल फ़ंक्शन को कॉल करें, यह पिछले शून्य बंद बदलाव और नए डाल देंगे मूल्य, 1 कहते हैं, बाईं ओर में:

[1,0,0,0,0]

अगर मैं एक 2 शब्दों में कहें, यह तो बदलाव होता है और इस तरह देखने के लिए डाल दिया:

[2,1,0,0,0]

... और एस ओ ऑन नया मूल्य आगे बढ़ता है और सबसे पुराना एक स्थानांतरित हो जाता है। मैं समझता हूं कि यह स्वयं को लागू करना बहुत आसान होगा, लेकिन यदि संभव हो तो मैं देशी पायथन डेटाटाइप का उपयोग करना चाहूंगा। क्या किसी को पता है कि इसके लिए कौन सा डेटाटाइप सबसे अच्छा होगा?

उत्तर

43
x = collections.deque(5*[0], 5) 

collections.deque के बारे में अधिक के लिए the docs देखें; जिस विधि को आप push कहते हैं उसे वास्तव में उस प्रकार में appendleft कहा जाता है।

दूसरा पैरामीटर (maxlen, अधिकतम लंबाई देने) पायथन 2.6 में जोड़ा गया था; यदि आप पाइथन के पुराने संस्करणों का उपयोग कर रहे हैं, तो यह उपलब्ध नहीं होगा।

+0

धन्यवाद। बस। – Doughy

2

बस एक इस पोस्ट के लिए अधिक उदाहरण

from collections import deque 

domains = ['1.com','2.com','3.com'] 
d = deque(domains)    
d.pop() #pop(delete) 3.com here 
d.appendleft('new.com') 


print d 

परिणाम: सूची

+0

आप पॉप का उपयोग क्यों करते हैं और maxlen नहीं? –

7

आप भी उपयोग कर सकते हैं

a = [0,0,0,0,0] 

a.pop(0) 
a.append(1) 

print a 
result [0,0,0,0,1] 

या सही बाहर में बाईं ओर के लिए, अन्यथा

a.pop(5) 
a.insert(0,1) 
print a 
result [1,0,0,0,0] 
+1

-1 यह अनुशंसित नहीं है। कारणों से दस्तावेज़ों को क्यों पढ़ें http://docs.python.org/library/collections.html?highlight=collections.deque#collections.deque – toom

+3

@toom इसकी अनुशंसा नहीं की जाती है, आपको केवल जुर्माना से अवगत होना चाहिए सूचियों का उपयोग करने के लिए। सादगी के लिए, एक सूची को हरा करना मुश्किल है। –

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