بسیاری از نیازهای ساختار داده با نوع لیست داخلی قابل برآورده هستند. با این حال، گاهی نیاز به پیادهسازیهای جایگزین با مصالحههای عملکردی متفاوت وجود دارد.
ماژول array شیئی به نام array فراهم میکند که مانند لیست است اما فقط دادههای همگن ذخیره میکند و آن را به طور فشردهتری ذخیره میکند. مثال زیر آرایهای از اعداد را نشان میدهد که به عنوان اعداد باینری بدون علامت دو بایتی (کد نوع "H") ذخیره شدهاند به جای ۱۶ بایت معمول برای هر ورودی لیستهای معمولی اشیاء int پایتون:
>>> from array import array
>>> a = array('H', [4000, 10, 700, 22222])
>>> sum(a)
26932
>>> a[1:3]
array('H', [10, 700])
ماژول collections شیئی به نام deque فراهم میکند که مانند لیستی با اضافه کردن و خارج کردن سریعتر از سمت چپ اما جستجوی کندتر در وسط است. این اشیاء برای پیادهسازی صفها و جستجوی عرضی درخت بسیار مناسب هستند:
>>> from collections import deque
>>> d = deque(["task1", "task2", "task3"])
>>> d.append("task4")
>>> print("Handling", d.popleft())
Handling task1
>>> unsearched = deque([starting_node])
>>> def breadth_first_search(unsearched):
... node = unsearched.popleft()
... for m in gen_moves(node):
... if is_goal(m):
... return m
... unsearched.append(m)
علاوه بر پیادهسازیهای جایگزین لیست، کتابخانه ابزارهای دیگری نیز ارائه میدهد مانند ماژول bisect با توابعی برای دستکاری لیستهای مرتبشده:
>>> import bisect >>> scores = [(100, 'perl'), (200, 'tcl'), (400, 'lua'), (500, 'python')] >>> bisect.insort(scores, (300, 'ruby')) >>> scores [(100, 'perl'), (200, 'tcl'), (300, 'ruby'), (400, 'lua'), (500, 'python')]
ماژول heapq توابعی برای پیادهسازی heap بر اساس لیستهای عادی فراهم میکند. کمترین مقدار ورودی همیشه در موقعیت صفر نگه داشته میشود. این برای برنامههایی مفید است که مکرراً به کوچکترین عنصر دسترسی پیدا میکنند اما نمیخواهند مرتبسازی کامل لیست را اجرا کنند:
>>> from heapq import heapify, heappop, heappush >>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0] >>> heapify(data) # مرتب کردن لیست به ترتیب heap >>> heappush(data, -5) # اضافه کردن یک ورودی جدید >>> [heappop(data) for i in range(3)] # دریافت سه کوچکترین ورودی [-5, 0, 1]
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial