ساختارهای داده اصلی در پایتون
ساختارهای داده اصلی در پایتون
داده ساختار های پایتون
تا اینجای مسیر برنامه نویسی پایتون، یاد گرفتیم که چگونه مقادیر ساده مثل یک عدد یا یک متن را در متغیرها ذخیره کنیم (مثلاً age = 22 یا name = "Sara"). اما در پروژههای واقعی، ما با مجموعهای از دادهها سر و کار داریم؛ مثلاً لیست اسامی دانشجویان یک کلاس، مختصات جغرافیایی یک نقطه، اطلاعات شناسنامهای یک کاربر، یا کلمات کلیدی منحصربهفرد یک مقاله. اگر برای ۱۰۰۰ داده، ۱۰۰۰ متغیر جداگانه تعریف کنیم، کدنویسی غیرممکن خواهد شد!
با اینکه در مقالات قبلی یاد گرفتیم با توجه به مقدار داده، داده ها به انواع مختلف int, float, str, bool, complex تقسیم بندی می شدند حال می خواهیم یاد بگیریم داده ساختار ها که ظرف این نوع داده ها هستند به چه صورتی تعریف می شوند.

اینجاست که با مفهوم ساختارهای داده (Data Structures) یا کالکشنها در پایتون آشنا میشویم. ساختار داده ظرفی است که به ما امکان میدهد مجموعهای از دادهها را در قالب یک متغیر واحد نگهداری، دستهبندی و مدیریت کنیم.
پایتون ۴ ساختار داده درونساخت (Built-in) بسیار مهم دارد:
- لیست (
List) - تاپل (
Tuple) - دیکشنری (
Dictionary) - مجموعه (
Set)
در ادامه، هر یک از این ساختارها را با تعریف ساده، ویژگیهای بنیادین و مثالهای ابتدایی بررسی میکنیم.
۱. لیست (List)
لیستها پرکاربردترین ساختار داده در پایتون هستند. یک لیست مجموعهای منظم از آیتمهاست که با علامت براکت [] و جدا کردن دادهها با کاما (,) تعریف میشود.
# تعریف یک لیست از اسامی دانشجویان
students = ["Ali", "Sara", "Reza", "Maryam"]
ویژگیهای کلیدی لیست:
- ترتیبدار (Ordered): آیتمها به ترتیبی که نوشته شدهاند حفظ میشوند و هر عضو دارای اندیس (Index عددی از صفر) است.
- تغییرپذیر (Mutable): پس از ساخت لیست، میتوان اعضای آن را تغییر داد، اضافه کرد یا حذف نمود.
- پذیرش عضو تکراری (Allows Duplicates): یک عضو میتواند چندین بار در لیست تکرار شود.
- ناهمگن (Heterogeneous): میتواند انواع داده مختلف (عدد، رشته، بولین) را همزمان در خود جای دهد.
- صورت مسئله: تعریف یک لیست ترکیبی شامل مشخصات یک دوره آموزشی، دسترسی به اولین عضو با اندیس و تغییر دادن دومین عضو آن.
# تعریف لیست
course_info = ["Python", 101, True, "Dr. Naseri"]
# دسترسی به عضو اول (اندیس ۰)
first_item = course_info[0]
# تغییر دادن عضو دوم (اندیس ۱)
course_info[1] = 201
print("عضو اول:", first_item)
print("لیست پس از تغییر:", course_info)
۲. تاپل (Tuple)
تاپل شباهت بسیار زیادی به لیست دارد، با این تفاوت بزرگ که قفل شده و غیرقابل تغییر است! تاپلها با پرانتز () تعریف میشوند. از تاپلها زمانی استفاده میکنیم که دادهها ثابت هستند و نمیخواهیم در طول اجرای برنامه تصادفاً دستکاری شوند (مثل روزهای هفته، مختصات جغرافیایی ثابت یا مقادیر RGB یک رنگ).
# تعریف مختصات یک نقطه ثابت (طول و عرض جغرافیایی)
location = (35.6892, 51.3890)
ویژگیهای کلیدی تاپل:
- تغییرناپذیر (Immutable): به هیچ وجه نمیتوان بعد از تعریف، عضوی را تغییر داد، حذف کرد یا افزود (تلاش برای تغییر آن خطای
TypeErrorمیدهد). - ترتیبدار (Ordered): مانند لیست دارای اندیس است و با
[0]و … میتوان به اعضای آن دسترسی داشت. - پذیرش عضو تکراری (Allows Duplicates): اعضای تکراری در آن مجاز هستند.
- امنیت بالا و مصرف حافظه کمتر: به دلیل تغییرناپذیر بودن، سرعت پردازش تاپلها از لیستها بیشتر است.
نکته طلایی: برای ساخت یک تاپل با تنها یک عضو، حتماً باید بعد از مقدار یک کاما بگذارید؛ مثلاً
single_item = ("Python",). اگر کاما نگذارید، پایتون آن را یک رشته معمولی درون پرانتز در نظر میگیرد!وجود پرانتز در نوشتن داده ساختار تاپل الزامی نمی باشد.
- صورت مسئله: تعریف یک تاپل شامل ابعاد یک تصویر (عرض، ارتفاع، کانال رنگ) و خواندن مقادیر آن با اندیس.
# تعریف تاپل ابعاد تصویر
image_shape = (1920, 1080, 3)
# خواندن عرض و ارتفاع با استفاده از اندیسگذاری
width = image_shape[0]
height = image_shape[1]
print(f"عرض تصویر: {width} | ارتفاع تصویر: {height}")
۳. دیکشنری (Dictionary)
دیکشنریها شبیه به یک دفترچه تلفن یا لغتنامه واقعی هستند که برای ذخیرهسازی زوج «کلید: مقدار» استفاده می شود. در دیکشنری، دسترسی به دادهها بر اساس شماره اندیس عددی نیست؛ بلکه بر اساس کلید (Key) انجام میشود. هر داده به شکل یک جفت Key: Value با علامت آکولاد {} ذخیره میشود.
# تعریف مشخصات یک کاربر
user_profile = {
"username": "sina_n",
"role": "Researcher",
"age": 28
}
ویژگیهای کلیدی دیکشنری:
- بر پایه کلید و مقدار (Key-Value Pair): هر کلید به یک مقدار مشخص اشاره میکند.
- کلیدهای منحصربهفرد (Unique Keys): کلیدها نباید تکراری باشند؛ اما مقادیر (Values) میتوانند تکراری باشند.
- تغییرپذیر (Mutable): میتوان مقدار مرتبط با یک کلید را ویرایش کرد یا جفتهای جدید اضافه نمود.
- کلیدهای تغییرناپذیر: کلیدها باید از نوع دادههای تغییرناپذیر مثل رشته یا عدد باشند.
- صورت مسئله: تعریف دیکشنری وضعیت یک بیمار، دسترسی به نام بیمار با استفاده از کلید، و تغییر ضربان قلب ثبتشده.
# تعریف دیکشنری اطلاعات بیمار
patient = {
"id": 1045,
"name": "Maryam",
"heart_rate": 78,
"has_arrhythmia": False
}
# خواندن مقدار با استفاده از نام کلید
patient_name = patient["name"]
# تغییر مقدار یک کلید
patient["heart_rate"] = 82
print("نام بیمار:", patient_name)
print("دیکشنری بهروزشده:", patient)
۴. مجموعه (Set)
مجموعه یا سِت، مشابه مفهوم مجموعه در ریاضیات است. یک مجموعه حاوی مقادیری بدون ترتیب است که هیچ عضو تکراری در آن وجود ندارد. مجموعهها نیز با علامت آکلاد {} (اما بدون کلید و دونقطه) یا با تابع set() تعریف میشوند.
# تعریف مجموعهای از شناسههای معتبر
unique_ids = {101, 102, 103, 101, 102}
# پایتون مقادیر تکراری 101 و 102 را خودکار حذف کرده و {101, 102, 103} را نگه میدارد.
ویژگیهای کلیدی مجموعه:
- بدون ترتیب (Unordered): اعضا ترتیب مشخصی ندارند؛ بنابراین اندیسگذاری (
[0]) ندارند. - عدم پذیرش عضو تکراری (No Duplicates): به محض ثبت عضو تکراری، نسخههای تکراری دور ریخته میشوند.
- تغییرپذیر (Mutable): میتوان به آن عضو اضافه یا از آن کم کرد؛ اما اعضای درون آن باید تغییرناپذیر باشند.
نکته طلایی برای مبتدیان: برای ساخت یک مجموعه خالی نمیتوانید از
{}استفاده کنید، چون پایتون آن را دیکشنری خالی در نظر میگیرد! مجموعه خالی حتماً باset()ساخته میشود.
- صورت مسئله: یک رشته شامل حروفی که تکرار شدهاند را به مجموعه تبدیل کنید تا حروف یکتای آن استخراج شوند.
# ساخت مجموعه از یک متن حاوی حروف تکراری
raw_text = "programming"
unique_characters = set(raw_text)
print("حروف یکتای موجود در کلمه:", unique_characters)
جدول مقایسه جامع ساختارهای داده
| ساختار داده | علامت تعریف | ترتیبدار؟ | تغییرپذیر؟ | عضو تکراری؟ | نحوه دسترسی به داده |
|---|---|---|---|---|---|
لیست (list) | [ ] | بله | بله | بله | با شماره اندیس عددی ([0]) |
تاپل (tuple) | ( ) | بله | خیر | بله | با شماره اندیس عددی ([0]) |
دیکشنری (dict) | {k: v} | بله (از نسخه ۳.۷+) | بله | کلید: خیر / مقدار: بله | با نام کلید (['key']) |
مجموعه (set) | { } یا set() | خیر | بله | خیر | فقط با پیمایش (حلقه) و عضویت |
نتیجهگیری
انتخاب ساختار داده مناسب نیمی از مسیر حل مسئله در برنامهنویسی است:
- اگر مجموعهای مرتب و پویا میخواهید که مقادیر آن کم و زیاد شوند، از لیست استفاده کنید.
- اگر دادههایی دارید که باید ثابت و ایمن بمانند، تاپل بهترین انتخاب است.
- اگر نیاز به ساختار اطلاعاتی شبیه به جدول شناسنامه یا فیلدهای مشخص دارید، دیکشنری را انتخاب کنید.
- اگر حذف تکراریها یا بررسی وجود عضو برایتان مهم است، مجموعه سریعترین گزینه است.
