خانه / آموزش‌ها / آموزش ماژول Collections در پایتون

آموزش ماژول Collections در پایتون

🐍 HomeOfPython
|
📅 1404/10/19

سطح مقدماتی (Beginner Level)

پایتون مجموعه‌ای از ساختارهای داده داخلی (Built-in) مانند لیست، دیکشنری و تاپل را ارائه می‌دهد. اما زمانی که نیاز به کارایی بیشتر و کدهای خواناتر داریم، ماژول استاندارد collections به کمک ما می‌آید. این ماژول جایگزین‌های تخصصی‌تری برای کانتینرهای استاندارد ارائه می‌دهد.

در این بخش با دو ابزار پرکاربرد Counter و namedtuple آشنا می‌شویم.

ساختارهای داده در collections

شمارش داده‌ها با Counter

کلاس Counter زیرمجموعه‌ای از دیکشنری است که برای شمارش اشیاء هش‌پذیر (Hashable) استفاده می‌شود. اگر بخواهید تعداد تکرار هر آیتم در یک لیست یا تعداد کاراکترها در یک رشته را بشمارید، این بهترین ابزار است.

مثال ۱: شمارش کاراکترها و آیتم‌ها

در این مثال می‌بینیم چگونه بدون نوشتن حلقه‌های تکراری، تعداد عناصر را محاسبه کنیم.

Python

مثال ۲: پیدا کردن پرتکرارترین آیتم‌ها

متد most_common() یکی از ویژگی‌های بسیار کاربردی Counter است.

Python

داده‌های ساختاریافته با namedtuple

تاپل‌های معمولی (Tuples) برای دسترسی به داده‌ها از ایندکس عددی استفاده می‌کنند (مثلاً point[0]). این کار خوانایی کد را کاهش می‌دهد. namedtuple به شما اجازه می‌دهد به آیتم‌های تاپل با نام دسترسی داشته باشید، دقیقاً مانند یک کلاس اما با مصرف حافظه کمتر.

مثال ۳: تعریف و استفاده از namedtuple

Python
python
# Static Example: ساختار برای داده‌های کاربر
# این کد نشان‌دهنده نحوه تعریف است و در اینجا اجرا نمی‌شود
from collections import namedtuple

User = namedtuple('User', ['id', 'username', 'email'])
# User(id=1, username='admin', email='admin@example.com')

سطح پیشرفته (Professional Level)

در سطح حرفه‌ای، ماژول collections ابزارهایی برای مدیریت کارآمدتر حافظه، سرعت بالاتر در عملیات صف (Queue) و مدیریت مقادیر پیش‌فرض در دیکشنری‌ها ارائه می‌دهد.

مدیریت کلیدهای ناموجود با defaultdict

در دیکشنری‌های معمولی، اگر به کلیدی دسترسی پیدا کنید که وجود ندارد، خطای KeyError دریافت می‌کنید. defaultdict این مشکل را حل می‌کند و اگر کلید وجود نداشته باشد، به صورت خودکار یک مقدار پیش‌فرض برای آن می‌سازد.

مثال ۴: گروه‌بندی داده‌ها

فرض کنید لیستی از تاپل‌ها داریم و می‌خواهیم آن‌ها را گروه‌بندی کنیم. بدون defaultdict باید مدام چک کنیم که آیا کلید وجود دارد یا خیر.

Python

مثال ۵: شمارش سریع با int

استفاده از int به عنوان کارخانه (Factory) پیش‌فرض، مقدار ۰ را برای کلیدهای جدید برمی‌گرداند.

Python

صف‌های دوطرفه با deque

لیست‌های پایتون برای اضافه کردن یا حذف کردن از انتهای لیست سریع هستند، اما اگر بخواهید از ابتدای لیست آیتمی را حذف کنید (pop(0))، پایتون مجبور است تمام عناصر دیگر را جابجا کند که کند است (O(n)). کلاس deque (Double Ended Queue) برای اضافه و حذف سریع از هر دو طرف (O(1)) طراحی شده است.

مثال ۶: عملکرد صف و پشته (Queue & Stack)

Python

نکات فنی و بهینه‌سازی (ChainMap)

گاهی اوقات نیاز دارید چندین دیکشنری را به عنوان یک واحد مدیریت کنید (مثلاً تنظیمات پیش‌فرض، تنظیمات فایل کانفیگ و تنظیمات خط فرمان). به جای کپی کردن و ادغام دیکشنری‌ها (که حافظه مصرف می‌کند)، از ChainMap استفاده کنید.

مثال ۷: اولویت‌بندی تنظیمات با ChainMap

Python