जांच करें collections.deque
। डॉक्स से:
प्रत्येक पक्ष में लगभग एक ही O (1) प्रदर्शन के साथ, Deque का समर्थन थ्रेड-सेफ, मेमोरी कुशल एपेंड और पॉप के दोनों ओर से होता है।
हालांकि सूची ऑब्जेक्ट समान संचालन का समर्थन करते हैं, वे तेजी से निर्धारित लंबाई के संचालन के लिए अनुकूलित होते हैं और पॉप (0) और इंसर्ट (0, v) संचालन के लिए मेमोरी मूवमेंट की लागत (एन) ओ के लिए होती है जो अंतर्निहित डेटा प्रतिनिधित्व के आकार और स्थिति दोनों को बदलते हैं। ।
जैसा कि यह कहता है, पॉप (0) या इंसर्ट (0, v) का उपयोग करते हुए सूची वस्तुओं के साथ बड़े दंड का उपयोग करते हैं। आप एक पर स्लाइस / इंडेक्स ऑपरेशंस का उपयोग नहीं deque
कर सकते हैं, लेकिन आप उपयोग कर सकते हैं popleft
/ appendleft
, जो ऑपरेशन के deque
लिए अनुकूलित है। यहाँ यह प्रदर्शित करने के लिए एक सरल बेंचमार्क है:
import time
from collections import deque
num = 100000
def append(c):
for i in range(num):
c.append(i)
def appendleft(c):
if isinstance(c, deque):
for i in range(num):
c.appendleft(i)
else:
for i in range(num):
c.insert(0, i)
def pop(c):
for i in range(num):
c.pop()
def popleft(c):
if isinstance(c, deque):
for i in range(num):
c.popleft()
else:
for i in range(num):
c.pop(0)
for container in [deque, list]:
for operation in [append, appendleft, pop, popleft]:
c = container(range(num))
start = time.time()
operation(c)
elapsed = time.time() - start
print "Completed %s/%s in %.2f seconds: %.1f ops/sec" % (container.__name__, operation.__name__, elapsed, num / elapsed)
मेरी मशीन पर परिणाम:
Completed deque/append in 0.02 seconds: 5582877.2 ops/sec
Completed deque/appendleft in 0.02 seconds: 6406549.7 ops/sec
Completed deque/pop in 0.01 seconds: 7146417.7 ops/sec
Completed deque/popleft in 0.01 seconds: 7271174.0 ops/sec
Completed list/append in 0.01 seconds: 6761407.6 ops/sec
Completed list/appendleft in 16.55 seconds: 6042.7 ops/sec
Completed list/pop in 0.02 seconds: 4394057.9 ops/sec
Completed list/popleft in 3.23 seconds: 30983.3 ops/sec
.append()
और.pop()
उन्हें O (1) (रियलकास्ट और नकल करना) होता है, लेकिन बहुत कम और केवल तब तक जब तक आप स्टैक को आकार नहीं देते। कभी भी हो)।