فصل دهم آموزش پایتون مقدماتی - لیست ها

سلام دوستانبا ادامه ی کتاب پایتون مقدماتی که به همراه دوست عزیزم جناب مهندس مهدی عباسپور شاهمرس نوشته و چاپ کردیم در خدمتتون هستیم. https://virgool.io/@mahdi.abbaspour.sh اساسی‌‌ترین ساختمان داده در پایتون، دنباله‌‌ها[1] هستند. هر عنصر از دنباله، عددی را برای تعیین موقعیت یا اندیس خود دارد. اندیس اول برابر صفر، دومی برابر یک و الی آخر است.پایتون از شش نوع دنباله پشتیبانی می‌‌کند که رایج‌‌ترین آن‌‌ها، لیست و چندتایی هستند. ما نیز در این فصل، به بحث در مورد لیست‌‌ها و در فصل بعدی در مورد چندتایی‌ها خواهیم‌‌پرداخت.کارهایی هستند که شما می‌‌توانید با همه نوع دنباله انجام‌‌دهید. این عملیات شامل اندیس‌‌گذاری[2]، برش[3]، جمع، ضرب و بررسی‌‌عضویت هست. علاوه بر این‌‌ها، پایتون دارای چندین تابع داخلی برای پیدا‌‌کردن طول دنباله، بزرگترین و کوچکترین عضو دنباله است.[1]Sequences [2]Indexing [3]Slicing10-1- لیست در پایتونلیست‌‌ها در پایتون، متنوع‌‌ترین نوع داده هستند. آن‌‌ها دنباله‌‌ای از مقادیر جداشده توسط کاما هستند که مابین براکت‌‌های مربعی یا همان [ ] قرار می‌‌گیرند. مهم‌‌ترین مزیت لیست، عدم نیاز به یک نوع بودن عناصر موجود در آن است. همان طوری که در شکل (10-1) می‌‌بینید، ساخت یک لیست، بسیار راحت و ساده است.شکل (10-1)اغلب کارهایی که می‌‌توان با لیست انجام‌‌داد، مشابه رشته است.10-2- دسترسی‌‌به مقادیر لیست‌‌هابرای این کار کافی‌‌است همانند شکل (10-2) اندیس ویا اندیس‌‌های مورد نیاز را درون براکت قراردهیم. چنان‌‌چه مشاهده می‌‌کنید در لیست اول عناصری از هر دو نوع رشته‌‌ای و عددی داریم.شکل (10-2)همان طوری که در شکل (10-3) می‌‌بینید، خروجی دستور چاپ اول، فقط یک عنصر و به عبارت دیگر، یک رشته خواهدبود. همچنین برای چاپ دوم، لیستی از اعداد 2 الی 5 را داریم. البته آخرین اندیس تعیین‌‌شده که مقداری برابر 6 دارد، در خروجی نخواهدبود.شکل (10-3)لازم به ذکر است که اگر از اعداد منفی برای دسترسی به اندیس‌‌ها استفاده‌‌نماییم، با حفظ اندیس صفر برای اولین عضو، شمارش بقیه از سمت راست خواهدبود. بنابراین اندیس منفی‌‌یک به آخرین عضو و اندیس منفی‌‌دو به یکی مانده به آخر اشاره خواهدداشت. همچنین اگر اندیس ابتدایی را مشخص‌‌کرده و انتهایی را مشخص‌‌نکنیم، منظور تا اندیس آخر خواهدبود. شکل (10-4) نمایانگر این مطالب است. خروجی این مثال را در شکل (10-5) می‌‌بینید.شکل (10-4)شکل (10-5)10-3- به‌‌روز رسانی لیستهمان گونه که در شکل (10-6) خواهیددید، شما می‌‌توانید مقدار یک یا چندین عنصر از لیست را با استفاده از عملگر انتساب تغییر‌‌دهید. همچنین به وسیله ( ) append عنصر جدیدی را به لیست افزود که این بحث را در بخش دیگری از این فصل بررسی خواهیم‌‌کرد.شکل (10-6)ابتدا مقدار اندیس 2 از لیست، به 2001 تغییر می‌‌کند. با توجه به این‌‌که در خط بعدی 3 اندیس برای تغییر در نظرگرفته شده ولی تنها دو مقدار برای آن‌‌ها انتصاب دادیم، مقادیر اندیس‌‌های صفر و یک به 2019 و 2018 تغییر می‌‌یابد. بنابراین لیست جدیدی در خروجی شکل (10-7) ظاهر می‌‌شود.شکل (10-7)10-4- حذف عناصر از لیستبرای حذف یک ویا چند عنصر از لیست، می‌‌توان از دستور del و یا متد ( ) remove استفاده‌‌کرد. اگر اندیس عنصر مدنظر را می‌‌دانید، از روش اول و در غیر این صورت از دومی استفاده‌‌نمایید. در شکل (10-8) مثال‌‌هایی در مورد دستور del خواهیم‌‌داشت. در مورد روش بعدی نیز در بخش مجزا بحث خواهیم‌‌کرد.شکل (10-8)در این قطعه کد ابتدا مقدار اندیس 2 حذف می‌‌شود. حال با توجه به این‌‌که دستور del در لسیت، آخرین اندیس را در نظر گرفته نمی‌‌گیرد،مقادیر اندیس‌‌های صفر و یک حذف می‌‌شود. که در نهایت لیست ما حاوی فقط یک عنصر خواهدبود. خروجی این مثال را در شکل (10-9) می‌‌بینید.شکل (10-9)10-5- عملیات پایه‌‌ی لیستهمانند رشته، در لیست می‌‌توان از عملگرهای + و * استفاده‌‌کرد. اولی برای اتصال چند لیست به هم و دومی برای تکرار یک لیست به تعداد تعیین‌‌شده، خواهد‌‌بود. همان طوری که در شکل (10-10) می‌‌بینید، خروجی نهایی این عملگرها، یک لیست است. همچنین چگونگی محاسبه‌‌ی طول لیست، بررسی عضویت و نحوه‌‌ی ایجاد یک حلقه تکرار را نیز در این شکل توضیح داده‌‌ایم.شکل (10-10)10-6- توابع داخلی لیست‌‌هابر خلاف تعداد زیاد توابع داخلی مربوط به رشته‌‌ها، زبان پایتون از تعداد محدودتر این توابع برای لیست پشتیبانی می‌‌کند. در ادامه به توضیح هریک از آن‌‌ها خواهیم‌‌پرداخت.10-6-1- توابع Max و Minاین توابع می‌‌توانند به ترتیب، بزرگترین و کوچکترین عنصر از یک لیست را برگردانند. روش و معیار مقایسه در تابع مذکور به صورت عناصر داخل لیست است. همچنین در نظر داشته باشید برای استفاده از این توابع بایستی تمامی عناصر لیست از یک نوع داده باشند. برای نمونه شکل (10-11) را می‌‌بینیم.شکل (10-11)نتیجه اجرای این قطعه کد به صورت شکل (10-12) است.شکل (10-12)10-6-2- تابع Listورودی این تابع، یک چندتایی و خروجی آن، یک لیست است. بنابراین اگر بخواهیم یک چندتایی را به نوع داده لیست تبدیل‌‌کنیم، به راحتی می‌‌توان از این تابع استفاده‌‌کرد. همان گونه که در شکل (10-13) می‌‌بینید، عمده تفاوت چندتایی با لیست در علامت‌‌های ( ) با [ ] است.شکل (10-13)خروجی این‌‌مثال را در شکل (10-14) نشان‌‌دادیم.شکل (10-14)10-7- متدهای کار با لیست‌‌هاهمانند توابع داخلی، تعداد محدودی از متدها برای لیست‌‌ها وجود دارند که در ادامه به توضیح آن‌‌ها می‌‌پردازیم.10-7-1- متد Countهمان طوری که در شکل (10-15) مشاهده می‌‌کنید، برای یافتن تعداد یک عنصر خاص در لیست موجود، از این متد استفاده می‌‌شود. خروجی این شکل به ترتیب مقادیر 2 و 1 است.شکل (10-15)10-7-2- متد Indexدر صورتی که به دنبال یافتن اولین اندیس ظاهرشدن عنصری از لیست باشیم، از این متد استفاده می‌‌کنیم. برای مثال در شکل (10-16) عنصر ‘xyz’ در اندیس‌‌های 1 و 3 ظاهر شده‌‌است ولی این متد مقدار 1 را برمی‌‌گرداند.شکل (10-16)10-7-3- متد Insertبا مشخص‌‌نمودن شماره‌‌ی اندیس و مقدار عنصر آن و با استفاده از این متد می‌‌توان عنصر مدنظر را در اندیس مشخص‌‌شده درج‌‌کرد. شکل (10-17) نمونه‌‌ای از کاربرد این متد را نشان می‌‌دهد.شکل (10-17)در شکل (10-18) می‌‌بینیم که عدد 2009 در محل اندیس سوم، یعنی عنصر چهارم جای گرفته است.شکل (10-18)10-7-4- متد Appendبرخلاف ( ) insert، این متد، عنصر مدنظر را به انتهای لیست اضافه می‌‌کند. به عنوان مثال، در شکل (10-19)، مقدار 2009 به لیست ما افزوده می‌‌شود.شکل (10-19)خروجی این مثال، به شکل (10-20) خواهدشد.شکل (10-20)10-7-5- متد Extendاین متد همانند ( ) append عمل می‌‌کند. با این تفاوت که به جای یک عنصر، یک لیست را به انتهای لیست مدنظر اضافه می‌‌کند. در شکل (10-21) لیست bList به انتهای aList افزوده می‌‌شود. درنهایت، خروجی ما به شکل (10-22) خواهدبود.شکل (10-21)شکل (10-22)10-7-6- متد Removeبرای حذف اولین مورد مشاهده‌‌شده از یک عنصر خاص در لیست، این‌‌متد را به‌‌کار می‌‌گیریم. در شکل (10-23) دو مورد از عنصر ‘xyx’ موجود است که تنها اولین مورد از آن با متد ( ) remove حذف خواهدشد. به عبارت دیگر، همیشه اندیس کوچکتر حذف خواهدشد.شکل (10-23)در شکل (10-24)، خروجی این قطعه کد را نشان دادیم.شکل (10-24)10-7-7- متد Popدر صورتی که هیچ اندیسی برای این متد مشخص‌‌نشود، مقدار آخرین عنصر لیست را برگردانده و سپس آن را از لیست حذف می‌‌کند. چنان‌‌چه در شکل (10-25) مشاهده می‌‌نمایید، اگر اندیس تعیین‌‌گردد، آن‌‌عنصر در خروجی ظاهرشده و سپس از لیست حذف خواهدشد. لازم به ذکر است که این متد خود لیست را بر‌‌نمی‌‌گرداند. برای این‌‌کار بایستی از دستور مجزا استفاده‌‌کنید که ما در این مثال، از دستور چاپ استفاده‌‌کردیم.شکل (10-25)در مثال اول این شکل، ابتدا عنصر ‘abc’ چاپ‌‌شده و سپس حذف می‌‌شود و در مثال دوم این کار برای عنصر اندیس 2 یعنی ‘zara’ انجام خواهدشد. خروجی این قطعه کد را در شکل (10-26) می‌‌بینید.شکل (10-26)10-7-8- متد Sortهمان گونه که از اسم آن پیداست، می‌‌توان برای مرتب‌‌سازی لیست‌‌ها، از آن استفاده‌‌کرد. همان طوری که در از قبل اشاره‌‌کردیم، بایستی تمامی داده های لیست در این متد از یک نوع باشند. شکل (10-27) بیانگر این مطلب است. لیست مرتب‌‌شده را در شکل (10-28) می‌‌بینید.شکل (10-27)شکل (10-28)10-7-9- متد Reverseبرای معکوس‌‌سازی لیست می‌‌توان از این متد استفاده‌‌کرد. نمونه‌‌ای از متد فوق را درشکل (10-29) مشاهده می‌‌کنید.شکل (10-29)در نهایت خروجی مثال ما به شکل (10-30) خواهد‌‌بود.شکل (10-30)در پست بعدی به Tuple یا چندتایی خواهیم پرداخت. با ما همراه باشین.