برنامه نویسی

ساختارهای داده در Python – DEV Community

وقتی ما در پایتون کد می نویسیم معمولاً ساختارهای داده ای متعددی وجود دارد مانند list، tuple، set، و dict که ما بیشتر از آن استفاده می کنیم. اما در کنار این چهار، پایتون ساختارهای داده دیگری دارد که هر کدام مانند آن چهار دارای نقاط قوت و ضعفی بر اساس پیاده سازی و ساختارشان هستند که می توانیم از آنها استفاده کنیم و بهتر است آنها را بشناسیم زیرا گاهی ممکن است کمک کند و عملکرد بهتری داشته باشد و ویژگی های بر اساس مشکل شما از list، tuple، set، و dict.

توضیحات تصویر
(مشاهده اندازه واقعی!)

یادداشت:

  • توالی کانتینر دنباله هایی هستند که می توانند انواع مختلفی را در خود جای دهند و می توانند تودرتو باشند.
  • دنباله های مسطح دنباله هایی هستند که فقط می توانند یک نوع ساده را در خود جای دهند.

من سعی می کنم نمودار بالا را از چپ به راست توضیح دهم. همچنین، من از طریق برخی از ساختارهای داده که شما قبلاً با آنها آشنا هستید، مرور نمی کنم.

فهرست در پایتون یک آرایه پویا است که می‌تواند شامل چندین نوع داده باشد و به راحتی می‌توانید از یک لیست پایتون به عنوان پشته استفاده کنید. .append() و .pop() روش ها و عملکرد خوبی دارند. اما، زمانی که صحبت از .insert() (یک مورد را به ابتدای لیست اضافه کنید) یا .pop() از ابتدای یک لیست، کارآمد نیست زیرا همه موارد دیگر باید با یک جابجا شوند.
بنابراین، استفاده از آن توصیه می شود collections.deque برای یک صف اول ورود، اول خروج.

from collections import deque

queue = deque([1, 2, 3]) # queue = [1, 2, 3]
queue.append(4) # queue = [1, 2, 3, 4]
queue.popleft() # queue = [2, 3, 4]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پایتون array type یک نوع توالی است که فقط می تواند انواع پایه مانند کاراکترها، اعداد صحیح و شناور را در خود جای دهد و زمانی که تعداد زیادی آیتم را در آن نگه دارید بسیار کارآمد است.
array روش های دیگری مانند .frombytes و .tofile بعلاوه .append، .pop، و .extend که در آن دارید list.

from array import array
numbers = array('l', [1, 2, 3, 4, 5]) # creating an array of 5 [type] items
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مستندات پایتون: آرایه را ببینید.

set هست یک بدون سفارش ساختار داده در پایتون که می تواند نگه دارد غیر تکراری قابل هش کردن موارد.
Hashable انواع یا کلاس هایی هستند که این را پیاده سازی می کنند __hash__ روش.

from collections import abc
# Test hashable
issubclass(int, abc.Hashable) # True
issubclass(list, abc.Hashable) # False

# define set using set() and {}
cities = set(['Berlin', 'Amsterdam', 'London', 'Amsterdam']) # {'Amsterdam', 'Berlin', 'London'}

cities = {'Berlin', 'Amsterdam', 'London', 'Amsterdam'{ # {'Amsterdam', 'Berlin', 'London'}

cities.add('London') # {'Amsterdam', 'Berlin', 'London'}
cities.add('Rome') # {'Amsterdam', 'Berlin', 'Rome', 'London'}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همچنین، یک نسخه تغییرناپذیر از مجموعه به نام وجود دارد frozenset که می توانید استفاده کنید.


cities = frozenset(['Berlin', 'Amsterdam', 'London', 'Amsterdam']) # {'Amsterdam', 'Berlin', 'London'}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مستندات Python: set and fronzenset را ببینید.

پس از انتشار پایتون 3.6 dict بر اساس درج اقلام سفارش داده می شود و نیازی ندارید collections.OrderedDict مگر اینکه بخواهید کد شما با پایتون < 3.6 سازگار باشد!

Counter یک زیر کلاس از dict برای hashable آیتم هایی در پایتون که می توانید از آنها برای شمارش آیتم های استفاده شده از آن استفاده کنید.

from collections import Counter

repeat_count = Counter(['Berlin', 'Amsterdam', 'London', 'Amsterdam'])
# Counter({'Amsterdam': 2, 'Berlin': 1, 'London': 1})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مستندات پایتون: شمارنده را ببینید.

با استفاده از ChainMap می‌توانید چندین نقشه را با هم گروه‌بندی کنید و یک نمای قابل به‌روزرسانی از آنها ایجاد کنید.

from collections import ChainMap

base = {'python': '3.10', 'year': '2021'}
new_update = {'python': '3.11', 'year': '2022', 'author': 'Guido van Rossum'}

python = ChainMap(base, new_update)
# ChainMap({'python': '3.10', 'year': '2021'}, {'python': '3.11', 'year': '2022', 'author': 'Guido van Rossum'})

list(python) # ['python', 'year', 'author']
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

می توانید به استفاده از آن فکر کنید ** برای پیوستن به چند dict با هم به جای استفاده ChainMap اما در نظر داشته باشید که ChainMap نگاشت های اساسی را با مرجع ترکیب می کند، بنابراین اگر خود را به روز کنید dict، شما ChainMap نمایش نیز در حال به روز رسانی است.

a = {**base, **new_update} # {'python': '3.11', 'year': '2022', 'author': 'Guido van Rossum'}

new_update['python'] = '3.12'

a # {'python': '3.11', 'year': '2022', 'author': 'Guido van Rossum'}

python # ChainMap({'python': '3.10', 'year': '2021'}, {'python': '3.12', 'year': '2022', 'author': 'Guido van Rossum'})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به مستندات پایتون مراجعه کنید: ChainMap.

در queue کتابخانه پایتون، می‌توانید چندین پیاده‌سازی صف را بیابید که من در اینجا توضیح مختصری درباره آنها می‌دهم.

صف

اجرای یک صف FIFO (اول وارد، اول خروج) در پایتون.
صف طول می کشد maxsize آرگومان که اندازه صف است و اگر تعداد آیتم های صف به این عدد برسد صف شما مسدود می شود تا زمانی که آیتم ها را از آن مصرف کنید.

from queue import Queue

q = Queue(1)
q.put('first')
q.put_nowait('second') # does not wait until get an item and raise an error if queue is full, which in this case queue is full and raise error
q.get() # 'first'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

LifoQueue

LifoQueue یک زیر کلاس از Queue که یک صف LIFO (آخرین ورود، اولین خروج) را پیاده سازی می کند.

صف اولویت

PriorityQueue یک زیر کلاس از Queue است که آیتم های موجود در صف را بر اساس اولویت کوچکترین به بزرگترین برمی گرداند.

from queue import PriorityQueue

q = PriorityQueue(3)
q.put(30)
q.put(14)
q.put(21)
q.get() # 14
q.get() # 21
q.get() # 30
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

SimpleQueue

SimpleQueue یک پیاده سازی از صف FIFO (first-in, first-out) است که نامحدود است و در Python 3.7 اضافه شده است.
توجه داشته باشید که پایتون استفاده می کند collections.deque زیر کاپوت در SimpleQueue.

به مستندات پایتون: صف مراجعه کنید.


پست های بیشتر در وبلاگ من – peyman.blog

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا