برای استفاده از متغیرها و ساختار دادههای متفاوت یک زبان برنامه نویسی، شناخت دقیق ویژگیها و کاربردهای آن ساختار دادهها لازم است. در زبان پایتون، انواع دادههای مختلفی وجود دارد که هر کدام بسته به شرایط و نیاز برنامهنویس قابل استفاده هستند. پایتون دارای ساختارهایی همچون «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set)، «دیکشنری» (Dictionary) و موارد دیگری است که امکانات گوناگونی دارند. دو نمونه از پرکاربردترین آنها لیست و دیکشنری است که در این مطلب به تعریف ساختار دادههای آنها میپردازیم و تفاوت لیست و دیکشنری در پایتون را مورد بررسی قرار خواهیم داد.
پایتون ساختار دادههای متفاوتی را درون ساز و کار خود پشتیبانی میکند تا مانند سایر زبانهای برنامه نویسی، باعث راحتی و کارآمدی کدنویسی شود. همه ساختارهای داده پایتون متوالی هستند و مجموعه دادهها را در قالبهای متنوعی ذخیره میکنند. لیست و دیکشنری از جمله مهمترین ساختارهای داده پایتون به حساب میآیند که ساده و در عین حال قدرتمند هستند و میتوان با استفاده از آنها طیف وسیعی از دادهها را به صورت ساختارمند ذخیره کرد.
همانطور که در تصویر بالا مشاهده میکنید، لیست و دیکشنری تا حدودی به یکدیگر شبیه هستند و فقط در برخی موارد تفاوت دارند، البته که دانستن تفاوت دیکشنری و لیست در طول مسیر یادگیری برنامهنویسی پایتون بسیار مهم است و هر یک موارد کاربرد خاص خود را دارد که در صورت عدم استفاده صحیح هر کدام در جای مناسب، برای یک پروژه کاربردی با مقیاس بزرگ، میتواند منجر به بروز اختلالاتی در کل آن پروژه شود که موجب اتلاف زمان زیادی برای اصلاح ساختار دادهها خواهد شد. حال در ادامه، هر یک از این ۲ ساختار داده و تفاوت لیست و دیکشنری در پایتون ، کاربرد و زمان درست استفاده از آنها و سایر موارد را بیان خواهیم کرد.
لیست در پایتون چیست ؟
لیست به عنوان ساختار دادهای از دنبالههای مرتب است که مولفههایی با ماهیت قابل تغییر دارد. هر آیتم یا متغیری که در داخل یک لیست قرار میگیرد، «مولفه» (عنصر | Element) نامیده میشود. همانطور که «رشتهها» (String) به عنوان کاراکتر بین علامت نقل قول (” “) تعریف میشوند، لیستها نیز در پایتون به این صورت تعریف میشوند که همه اعضاء داخل کروشه ([ ]) قرار میگیرند و با کاما ( , ) از هم جدا میشوند.
یکی از بهترین زمانهایی که میتوان از لیست استفاده کرد، هنگامی است که با متغیرهای مرتبط سر و کار داریم. از آنجایی که لیستها قابل تغییر هستند، میتوان در حین برنامه نویسی، مولفهای به آنها اضافه، کم یا بهروزرسانی کرد. در لیست پایتون به دلیل وجود «اندیس» (index) برای هر مولفه داخل آن، این عناصر به ترتیب درکنار یکدیگر قرار میگیرند و دسترسی آسان از طریق اندیسها به هریک از مولفهها امکانپذیر است. در لیست امکان تکرار مولفهها وجود دارد، زیرا اندیسهای آنها با یکدیگر متفاوت خواهند بود، بنابراین هر دو در لیست در جایگاه خود ذخیره میشوند. برای درک بهتر ساختار لیست در پایتون مثالی در ادامه آمده است.
sample_list = [5, "python", 5, [100, 200, 300]]
print(sample_list)
خروجی کدهای بالا به صورت زیر است.
[5, 'python', 5, [100, 200, 300]]
دیکشنری در پایتون چیست ؟
دیکشنری به عنوان ساختار داده پیشفرض پایتون برای ذخیرهسازی و جمعآوری اطلاعات در قالب جفتهای «کلید-مقدار» (Key-Value) استفاده میشود. دیکشنریها داخل آکولاد ({ }) نوشته و با کاما ( , ) از یکدیگر جدا میشوند. اگر چه کلید و مقدار با قرار گرفتن علامت دو نقطه ( : ) میان آنها از هم متمایز میشوند.
عناصر دیکشنری قابل تغییر هستند و ترتیب در آنها مهم نیست. فراموش نشود که کلمه کلید در هر عنصر باید یکتا و «حساس به حروف کوچک و بزرگ» (Case-Sensitive) باشد؛ زیرا از این طریق میتوان به سادگی در میان مولفههای دیکشنری با استفاده از کلید به مقدار داده متناظر با آن دسترسی پیدا کرد.
در مثال زیر مشاهده میشود که نوع داده مقدار هر عنصر در دیکشنری میتواند متفاوت باشد؛ مثلاً یک مقدار میتواند از نوع رشتهای، دیگری از نوع «بولی» (boolean) و مقداری دیگر از نوع عددی (صحیح یا اعشاری و سایر موارد) یا حتی خود، لیستی از متغیرهای دیگر باشد.
sample_dict = {
"brand": "Ford",
"electric": False,
"year": 1964,
"colors": ["red", "white", "blue"]
}
print(sample_dict)
print(sample_dict["year"])
خروجی دیکشنری بالا به صورت زیر است.
{'brand': 'Ford', 'electric': False, 'year': 1964, 'colors': ['red', 'white', 'blue']} 1964
همانطور که در مثال آورده شده است، برای دسترسی به مقدار عنصر year
، این کلید را به صورت sample_dict[“year”]
مینویسیم. در کل برای دسترسی به هر مقدار از مولفهها، لازم است در دستورات مختلف، از کلید آن مقدار همراه با نام متغیر استفاده شود.
معرفی فیلم های آموزش زبان برنامه نویسی پایتون
زبان برنامه نویسی پایتون، زبانی بسیار گسترده است که در زمینههای مختلف کاربرد دارد. برای یادگیری هرچه بیشتر و بهتر پایتون و استفاده درست بر اساس نیاز و حیطهای که در آن فعالیت میکنیم، نیاز به استفاده از منابع خوب و معتبر وجود دارد. تم آف یکی از سایتهای فارسی زبانی به حساب میآید که در آن دورههای آموزشی بسیاری در حوزه برنامه نویسی پایتون ارائه شده است. این دورهها شامل پایتون مقدماتی تا پیشرفته، مباحث شیءگرایی، نحوه استفاده از انواع کتابخانه های پایتونی در حوزههای مختلف، و آموزشهای پروژه محور و تمرینی میباشد.
- برای دسترسی به صفحه مجموعه دورههای ویدیویی آموزش پایتون تم آف + کلیک کنید.
آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ تم آف
تفاوت لیست و دیکشنری در پایتون
میتوان پارامترهای مختلفی را برای مقایسه لیست و دیکشنری در نظر گرفت؛ از جمله مواردی که این دو در آنها باهم تفاوت دارند شامل تعریف، سینتکس، نوع اندیس، حالت دسترسی، ترتیب مولفهها، تغییرپذیری و سایر موارد است. ابتدا برای تعریف آنها باید به این مورد اشاره کرد که لیستها مجموعههایی از عناصر مختلف در کنار یکدیگر هستند، در مقابل، دیکشنری مجموعهای از مولفههای جفت شده دوتایی کلید-مقدار است. در اصول نحوی لیست، باید از کروشه ([ ]) برای محصور کردن مولفهها استفاده شود و جداسازی آنها از طریق کاما (ویرگول) انجام میشود. از طرف دیگر در دیکشنری تمام عناصر کلید و مقدار را داخل آکولاد ({ }) قرار میدهیم و برای جداسازی کلید از مقدار، باید از علامت دونقطه ( : ) استفاده کنیم.
در مورد نوع اندیسگذاری و دسترسی به عناصر در لیست، این فرایند به صورت خودکار از صفر شروع میشود و تا انتهای لیست ادامه پیدا میکند، البته که برای دسترسی به عناصر باید از همین اندیسها استفاده شود. در دیکشنری نیاز است که به ازای هر مقدار، کلیدی به عنوان اندیس آن در نظر گرفته شود، دسترسی به مقادیر مورد نظر نیز از طریق همین کلیدها انجام میشود.
تفاوت لیست و دیکشنری در پایتون به لحاظ ترتیب عناصر چیست؟
در رابطه با اهمیت ترتیب مولفهها باید گفت، این مسئله فقط در لیستها حفظ میشود. عناصر داخل لیست ماهیتی تغییرپذیر دارند، یعنی در صورت نیاز به تغییر، میتوان آنها را اصلاح کرد و این بهروزرسانی اثری بر روی اندیسها ندارد. برای ایجاد تغییرات روی مولفههای دیکشنری باید حواسمان به کلیدها باشد، زیرا کلید نمیتواند تکرار شود ولی تغییر و تکرار مقدار متناظر با آن اهمیتی ندارد.
به عنوان مثالی برای درک بهتر این موضوع، اگر فرض شود که میخواهیم اطلاعات تعدادی از دانشآموزان را در یک دیکشنری ذخیره کنیم. در این صورت، لازم است خصوصیتی مثل کد ملی را به عنوان کلید انتخاب کنیم، چون مقداری یکتا است و هیچ دو انسانی وجود ندارند که کد ملی آنها یکسان باشد. اما ممکن است دو دانشآموز همنام باشند. بنابراین ممکن است مقادیر عنصرهای دیکشنری یکسان باشند و تکرار شوند، اما کلیدها باید منحصربهفرد باشند و هیچ ۲ کلیدی نمیتوانند مثل هم باشند.
تفاوت لیست و دیکشنری در پایتون در یک نگاه
خلاصهای از مقایسه تفاوتهای لیست و دیکشنری را در جدول زیر مشاهده میکنیم.
پارامتر مقایسه | لیست | دیکشنری |
تعریف | مجموعهای از مولفههای مختلف | مجموعهای از جفتهای کلید-مقدار |
سینتکس | قرار گرفتن مولفهها میان [ ] و جداسازی عناصر از هم با کاما ( , ) | قرار گرفتن کلید-مقدارها میان { } و جداسازی کلید از مقدار با دونقطه ( : ) |
نوع اندیس | اندیسهای عدد صحیح، شروع از 0 | کلیدهای دیکشنری از هر نوع داده |
حالت دسترسی | دسترسی از طریق مقدار اندیس | دسترسی از طریق کلید |
ترتیب مولفهها | حفظ ترتیب پیشفرض مولفهها | عدم وجود تضمین برای ترتیب مولفهها |
تغییرپذیری | ماهیت تغییرپذیری دارد. | مقادیر قابل تغییر هستند، اما مولفه کلید نباید تکرار شود. |
روش ایجاد | با استفاده از متد ()list | با استفاده از متد ()dict |
متد ()sort | مرتب کردن صعودی یا نزولی مولفهها | مرتب کردن کلیدها به طور پیش فرض |
چه زمانی از دیکشنری به جای لیست استفاده می شود ؟
لیست مجموعهای از دادهها است که بهطور مرتب کنار هم قرار گرفتهاند؛ درحالیکه دیکشنری اطلاعات را در قالب جفتهای کلید-مقدار با استفاده از ساختار «جدول درهمسازی» (Hash table) ذخیره میکند. به همین دلیل، بازیابی یک مولفه در پایتون از ساختار لیست نسبت به دیکشنری پیچیدهتر است. بنابراین دیکشنری از لیست در پایتون سریعتر عمل میکند.
بهرهوری موقعی بیشتر میشود که از دیکشنری برای جستجو میان مولفهها استفاده کنیم، زیرا بسیار سریعتر از لیست است و زمان کمتری برای پیمایش روی مولفهها لازم دارد.
بهعلاوه، لیست ترتیب مولفهها را حفظ میکند درحالیکه در دیکشنری ترتیب خاصی وجود ندارد. بنابراین وقتی از ساختار داده لیست استفاده میشود که دغدغه ترتیب داشتن دادهها وجود داشته باشد. همچنین، توصیه میشود در هنگام مواجهه با مقادیر دادهای که ممکن است در آینده تغییر کنند، از ساختار داده لیست استفاده شود. به دلیل ماهیت منحصر به فردی که کلیدها در دیکشنری دارند، در صورت تغییر و اصلاح آنها در ساختار دیکشنری، احتمالاً دچار مشکل خواهید شد.
علاوه بر مواردی که گفته شد، از نظر فضای اشغال شده نیز، دیکشنریها در پایتون به فضای بسیار کمتری برای ذخیره عناصر داده در مقایسه با لیستها نیاز دارند. با نگاهی به تمام نکات بالا، کاملاً واضح است که دیکشنریها در مقایسه با لیستهای پایتون، برای استفاده بهتر و کارآمدتر هستند.
کاربرد های لیست در پایتون
برخی از کاربردیهای کلیدی لیستهای پایتون در ادامه فهرست شده است.
- استفاده از لیست برای ذخیرهسازی دادههای مرتب و متوالی
- کاربرد لیست در پایگاه داده
- استفاده از لیست در قالب JSON
- کاربرد لیست برای عملیات مربوط به آرایهها
JSON برای پایتون — راهنمایی برای مبتدیها
کاربرد های دیکشنری در پایتون
در این بخش به بعضی از کاربردهای مهم دیکشنری در پایتون اشاره شده است.
- استفاده از دیکشنری به عنوان دستور Switch
در پایتون
- کاربرد دیکشنری برای ذخیرهسازی مقادیر زیاد داده به منظور دسترسی سریع و آسانتر
- استفاده از دیکشنری به عنوان اندیسگذاری برای محتوا
- کاربرد دیکشنری در ساخت اشیاء منطبق (Map Object | به ازای یک مولفه مشخص، مولفه دیگری وجود داشته باشد، منظور جفتهای کلید-مقدار است)
- استفاده از دیکشنری برای ایجاد قالب داده مختص لیستها
- کاربرد دیکشنری در JSON
جمعبندی
تاکنون متوجه شدیم که لیستها و دیکشنریها مهمترین ساختارهای داده در برنامهنویسی پایتون هستند که تفاوتهایی از جنبههای مختلفی مانند سینتکس، روش ذخیرهسازی، پیادهسازی و سایر موارد دارند. البته اگرچه با یکدیگر متفاوت هستند، اما هر دوی آنها از ساختار دادههای پرکاربرد در پایتون به شمار میروند که میتوان از آنها هنگام ذخیره سازی دادههای خطی در حین برنامه نویسی استفاده کرد. برای یادگیری بیشتر این نوع مفاهیم در برنامه نویسی پایتون میتوان از دورههای آموزشی مختلف استفاده کرد.