Table of Contents
نگاه کلی به مجموعههای داده در پایتون
در برنامههای واقعی، معمولاً فقط با یک عدد یا یک رشته سروکار نداریم؛ بلکه با «چندین» مقدار کار میکنیم: فهرست نمرهها، نام دانشآموزان، قیمت محصولات، لیست کارها و …
در پایتون برای نگهداشتن چند مقدار در کنار هم، از «ساختارهای داده» (مجموعههای داده) استفاده میکنیم.
در این فصل فقط یک دید کلی از مهمترین نوعهای مجموعهای در پایتون میگیرید و در زیرعنوانهای بعدی (لیست، تاپل، دیکشنری، مجموعهها) با هرکدام جداگانه کار خواهید کرد. اینجا هدف شما این است که:
- بدانید چرا به مجموعههای داده نیاز داریم.
- فرق کلی نوعهای مختلف را درک کنید.
- موقعیتهای سادهای را تشخیص دهید که کدام ساختار ممکن است مناسبتر باشد.
چرا به مجموعههای داده نیاز داریم؟
فرض کنید میخواهید نمرهٔ سه آزمون را در برنامهتان استفاده کنید.
بدون استفاده از ساختار داده، شاید اینطور بنویسید:
score1 = 18
score2 = 15.5
score3 = 20
حالا اگر ۳۰ نمره داشته باشید چه؟ باید score30 هم تعریف کنید؟
مشکلها:
- مدیریت تعداد زیادی متغیر سخت میشود.
- اجرای کارهای تکراری روی همهٔ آنها (مثل محاسبهٔ میانگین) مشکل است.
- کد شما شلوغ و گیجکننده میشود.
با یک مجموعهٔ داده (مثلاً «لیست») میتوانید بنویسید:
scores = [18, 15.5, 20]حالا همهٔ نمرهها را در یک متغیر منطقی و منظم دارید.
دستهبندی کلی مجموعههای داده
در پایتون چند نوع اصلی مجموعهٔ داده وجود دارد. در این فصل با این چهار نوع مقدماتی آشنا میشوید:
list(لیست)tuple(تاپل)dict(دیکشنری)set(مجموعه)
هر کدام ویژگیهای خاص خود را دارند. برای شروع، چند ویژگی مهم را به زبان ساده ببینیم.
چند معیار مهم برای مقایسهٔ ساختارهای داده
۱. قابل تغییر بودن یا نبودن (Mutable / Immutable)
آیا بعد از ساختن مجموعه میتوانید عناصرش را عوض کنید؟
- قابل تغییر (Mutable): میتوانید بعداً عنصر اضافه/حذف/ویرایش کنید.
- غیرقابل تغییر (Immutable): بعد از ساختن، دیگر محتوایش عوض نمیشود.
۲. ترتیبدار بودن یا نبودن (Ordered / Unordered)
آیا ترتیب عناصر مهم و حفظشده است؟
- ترتیبدار: میتوانید بگویید «عنصر اول»، «عنصر دوم»، …
- بیترتیب: بیشتر شبیه یک «کیسه» از مقادیر است، ترتیب مشخصی ندارد.
۳. اجازهٔ تکراری بودن عناصر
آیا میتوان یک مقدار را چند بار داخل مجموعه داشت؟
۴. روش دسترسی به داده
آیا با «شمارهٔ موقعیت» (index) به عنصر میرسید یا با «کلید» (key)؟
در ادامه، یک جدول خیلی کلی (بدون جزئیات) از این چهار نوع:
| نوع | ترتیبدار؟ | قابلتغییر؟ | تکرار مجاز؟ | روش دسترسی اصلی |
|---|---|---|---|---|
لیست list | بله | بله | بله | اندیس (شمارهٔ عنصر) |
تاپل tuple | بله | خیر | بله | اندیس |
دیکشنری dict | بله (از پایتون ۳٫۷ به بعد) | بله | کلیدها یکتا | کلید (key) |
مجموعه set | خیر | بله | خیر (همه یکتا) | مستقیماً با مقدار |
در زیرعنوانهای بعدی، هر کدام از اینها را دقیقتر یاد میگیرید؛ فعلاً همین شناخت سطح بالا کافی است.
چند مثال ساده از موقعیت استفاده از هر ساختار
لیست (لیست معمولی از چیزها)
وقتی یک «فهرست» از چیزها دارید که ترتیب آنها مهم است، یا میخواهید روی همهشان یک کار انجام دهید، لیست گزینهٔ خیلی خوبی است.
نمونه کاربرد:
- فهرست نمرهها
- لیست نام دانشآموزان
- لیست قیمت چند محصول
names = ["Ali", "Sara", "Reza"]
prices = [12000, 35000, 78000]در بخش «لیستها (Lists)» با ساخت، تغییر، اضافهکردن و حذف و … در لیستها آشنا میشوید.
تاپل (دادههای نسبتاً ثابت)
وقتی یک سری اطلاعات ثابت دارید که قرار نیست در طول برنامه تغییر کنند، گاهی از «تاپل» استفاده میشود.
مثال خوب: مختصات یک نقطه، یا تنظیماتی که نمیخواهید اشتباهی تغییرشان بدهید.
point = (10, 20)
color = (255, 0, 0) # رنگ قرمز در مدل RGBدر بخش «تاپلها (Tuples)» میبینید که تاپلها از نظر ظاهر شبیه لیست هستند، اما قابل تغییر نیستند.
دیکشنری (جفت کلید–مقدار)
وقتی میخواهید برای هر «کلید» یک «مقدار» نگه دارید، مثلاً برای هر «نام کاربر» یک «رمز عبور»، یا برای هر «کد محصول» یک «قیمت».
user = {
"username": "ali123",
"age": 25,
"city": "Tehran"
}
اینجا username، age، city «کلید» هستند و "ali123"، 25، "Tehran" «مقدار» مربوط به هر کلید.
در بخش «دیکشنریها (Dictionaries)» یاد میگیرید چطور با کلیدها مقدار را بخوانید، اضافه کنید و تغییر بدهید.
مجموعه (Set) – دادههای یکتا
وقتی فقط میخواهید بدانید «چه چیزهایی» داریم، بدون اینکه ترتیب برایتان مهم باشد، و نمیخواهید تکراریها را نگه دارید، set بهدرد میخورد.
مثلاً از یک لیست بزرگ ایمیلها، بخواهید فقط ایمیلهای «منحصربهفرد» را داشته باشید:
emails = ["a@test.com", "b@test.com", "a@test.com"]
unique_emails = set(emails)در بخش «مجموعهها (Sets – مقدماتی)» با این نوع و کاربردهایش (بهخصوص حذف تکراریها) آشنا میشوید.
انتخاب ساختار دادهٔ مناسب (نگاه مقدماتی)
در همین فصل یک زیرعنوان جداگانه برای «انتخاب ساختار دادهٔ مناسب» دارید که بهطور مشخصتر کمک میکند تصمیم بگیرید کجا از چه چیزی استفاده کنید.
اینجا فقط چند راهنمای خیلی کلی میآوریم:
- اگر فقط «لیست از چیزها» میخواهید → اغلب
list - اگر آن لیست قرار نیست عوض شود → شاید
tuple - اگر برای هر چیز یک «برچسب/کلید» دارید → معمولاً
dict - اگر فقط مجموعهای از مقادیر یکتا میخواهید و ترتیب مهم نیست →
set
در ادامهٔ فصل، هر نوع را جداگانه تمرین میکنید و قدمبهقدم حس بهتری نسبت به انتخاب ساختار مناسب پیدا میکنید.
چند تمرین پیشنهادی برای درک بهتر (بدون نوشتن کد پیچیده)
این تمرینها را لازم نیست دقیقاً همین الان با کد حل کنید؛ میتوانید فقط فکر کنید که برای هر مورد «چه ساختار دادهای» مناسبتر است:
- ذخیرهٔ ۵ نام دوستتان به ترتیبی که شماره تلفنشان را ذخیره کردهاید.
- نگهداشتن نام کاربری و رمز عبور برای یک کاربر.
- نگهداشتن نام روزهای هفته (اینها قرار نیست در طول برنامه عوض شوند).
- تهیهٔ مجموعهای از زبانهای برنامهنویسی که دوستانتان بلدند، بهصورتی که تکراریها حذف شود (مثلاً اگر دو نفر هر دو
Pythonبلدند، فقط یک بارPythonثبت شود).
در زیرعنوانهای بعدی، با هر کدام از این ساختارها بهطور عملی کار خواهید کرد و جواب این تمرینها برایتان طبیعی میشود.