آموزش پایتون به زبان ساده: کار با لیست‌ها

در قسمت قبل، لیست‌ها رو معرفی کردیم و یه سری توابع کار با لیست‌ها مثل حذف و اضافه کردن رو بررسی کردیم. در این قسمت می‌خوایم مطالبی بیشتری درباره کار با لیست‌ها رو یاد بگیریم.

کار با حلقه در لیست‌ها

همون‌طور که می‌دونید لیست‌ها مجموعه‌ای از داده‌های کنار هم هستند که با ترتیب خاصی کنار هم قرار گرفته‌اند. گاهی اوقات ما قصد داریم که در تک تک عناصر لیست پیمایش کنیم و مثلا مقادیر اونا رو چاپ کنیم. یا بلاهای دیگه‌ای به سرشون بیاریم!
یکی از راه‌ها اینه که بیایم به صورت تک تک با استفاده از اندیس اونا مقادیر رو نشون بدیم. با یک مثال نحوه‌ی این کار رو توضیح میدم. ابتدا یکی از مثال‌های قبلی رو بررسی کنیم:

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
print(languages)

در این مثال ما یه لیست تعریف کردیم و بعد از اون با استفاده از تابع print کل لیست رو توی خروجی چاپ کردیم. اما اگه به خروجی نگاه کنید، فرمت جالبی نداره و دقیقا لیست رو با تمام مخلفاتش یعنی کاماها و براکت‌ها نشون داده! اما مثلا ما قصد داریم که تک تک آیتم‌های لیست رو زیر هم نشون بده. یه راهی که فعلا به ذهنمون میرسه اینه که بیایم چند بار دستور print رو بنویسیم و هر بار به ترتیب مقادیر عناصر رو چاپ کنیم. مثال زیر:

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
print(languages[0])
print(languages[1])
print(languages[2])
print(languages[3])
print(languages[4])

اگه برنامه رو اجرا کنید، می‌بینید که خروجی نسبتا قشنگ‌تری داره. اما کار با لیست‌ها به این شکل در ادامه ما رو با مشکلاتی روبرو می‌کنه. مثلا چه مشکلی؟

تو این مثال ما تعداد عناصر محدودی رو داشتیم. ولی اگه مثلا ۱۰۰ تا یا ۱۰۰۰ تا عنصر داشتیم چیکار می‌کردیم؟ آیا برای تک تک اونا این تابع print رو تکرار می‌کردیم؟ 
توی تعداد بالا اصلا چه جوریه بدونیم که لیست‌ما چه تعداد عنصر داره؟
یا این که بعضی مواقع ممکنه ما یه سری از اندیس‌ها رو فراموش کنیم یا تکرار کنیم..

اینجا بود که برنامه‌نویسا تصمیم گرفتند که از حلقه‌ها یا لوپ‌ها استفاده کنن. حلقه‌ها چی هستند؟
ما با استفاده از حلقه‌ها می‌تونیم کارهای تکراری رو با تنها با نوشتن تعداد بسیار کد کمتر انجام بدیم. چه ده بار، چه صد بار، چه هزار بار. اصلا کار کامپیوتر اینه. مثل ما آدما نیستند که خسته بشن یا اشتباه کنن:)

خب اجازه بدین تا با نحوه‌ی کار با حلقه‌ها آشنا بشیم. به طور کلی ما دو نوع حلقه در پایتون داریم: حلقه for و حلقه while. که برای کار با لیست‌ها اغلب از حلقه for استفاده میشه. بیاین همین مثال بالا رو با استفاده از حلقه for بازنویسی کنیم:

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
for item in languages:
    print(item)

توضیح:
در ابتدا ما یه لیستی رو تعریف کردیم و ادامه یه حلقه for رو نوشتیم که الان میخوایم با نحوه‌ی کار با اون آشنا بشیم.
در ابتدای خط کلمه کلیدی for میاد.
بعد از اون نام یه متغیر میاد. در واقع این یه متغیر موقت با نام دلخواه هستش که توی لیست به کار برده میشه.
بعد از اون کلمه کلیدی in میاد.
و سپس نام لیست‌مون میاد. در اینجا ما یه لیستی با نام languages تعریف کردیم که در اینجا دقیقا همین نام باید بیاد.
و در نهایت هم کاراکتر کلیدی : باید بیاد.

در خط بعد دستور یا دستوراتی که قراره تکرار بشن باید بعد از ۴ فاصله یا اندازه یه تب نسبت به for شروع بشن.
نکته‌ای که وجود داره اینه که زبان پایتون به این فاصله‌ی تب‌ها خیلی اهمیت میده.

حالا یه بار به زبان ساده بگم که این حلقه چی کار می‌کنه.
در ابتدا یه متغیر موقت ساخته میشه. مثلا توی این مثال item هستش، که این متغیر هر بار نقش یه اندیس از لیست هستش. یعنی از اولین عنصر شروع میشه و تا آخرین عنصر تکرار میشه. در هر بار دستوراتی که در حلقه for وجود دارند رو اجرا می‌کنه.

البته این مثال ساده‌ای از کار با حلقه‌ها بود. مثلا می‌تونیم تعداد خط‌های بیشتری توی خروجی نشون بدیم. و یا خروجی مون به شکل دیگه‌ای نشون داده بشه. به مثال زیر دقت کنید:

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
for item in languages:
    print(F”{item} is a language”)
    print(‘****’)
print(‘*** End of Code ***’)

توضیح:
اگه دقت کنید حلقه ما دو دستور داره. چرا؟ چون به اندازه یه تب یا چهار فاصله نسبت به for فاصله دارند. اما اگه دقت کنید، دستور آخر یک بار و اون هم بعد از پایان حلقه اجرا میشه.

در کار با حلقه‌ها ممکنه که با خطاهایی روبرو بشین. مثلا:

  • کاراکتر : را در پایان خط حلقه یادتون بره.
  • بعضی مواقع این فاصله‌ها رو رعایت نکنید. و اشتباها بعضی جاها رو اضافه فاصله بذارین و بعضی جاها رو هم از قلم بندازین.

خب تا اینجا با نحوه‌ی کار با حلقه‌ها در لیست‌ها آشنا شدیم. در ادامه قصد داریم تا ویژگی‌های دیگه‌ای رو هم بررسی کنیم.

ساخت لیست‌های عددی

همون‌طور که می‌دونین انواع داده‌های مختلفی می‌تونن در لیست‌‌ها تعریف بشن. برای مثال ما می‌تونیم لیستی از اعداد رو داشته باشیم. در ادامه قصد داریم تا با استفاده از تابع range دنباله‌ای از اعداد رو تعریف کنیم.

کار با تابع range

به طور کلی سه نوع حالت برای کار با تابع range وجود داره.
زمانی که یک آرگومان داریم.
زمانی که دو آرگومان داریم.
زمانی که ۳ آرگومان داریم.

خب اجازه بدین تا برای هر کدوم مثالی رو بنویسم که با نحوه‌ی کار اونا آشنا بشین.

for i in range(6):
    print(i)

توضیح:
در اینجا ما یه آرگومان برای تابع range داریم و این تابع از مقدار پیش فرض صفر شروع میشه و تا یک رقم قبل از اون مقدار آرگومان چاپ میشه. برای نمونه اگه برنامه رو اجرا کنید، توی خروجی مقادیر ۰ تا ۵ نشون داده شده.

for i in range(1, 6):
    print(i)

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

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

for i in range(1, 20, 3):
    print(i)

کارکردن با بخشی از لیست

زمان‌هایی پیش میاد که قصد داریم فقط به یه بازه‌ی خاصی از لیست‌ها کار کنیم. در واقع ما میخوایم یه برشی از لیست داشته باشیم و با اون کار کنیم. برای این منظور باید از کارکترهای [ : ] استفاده کنیم. در ادامه نحوه‌ی به کارگیری اونا رو به همراه مثال توضیح میدم.

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
print(languages[1:3])

اگه دقت کنید، یه جورایی شبیه کار با اندیس‌ها توی لیست‌ها هستش. اما اینجا داخل [ ] دو تا عدد به همراه یه : بین‌شون داریم. تو این مثال یعنی من یه بازه میخوام که شروعش از اندیس یکم باشه و پایانش تا یک عنصر قبل از ۳. حالا با هم مثال‌های دیگه رو بررسی کنیم.

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
print(languages[:3])

اگه تو استفاده از slice ها، عدد اول رو نذاریم، یعنی یه چیزی شبیه مثال بالا. برنامه به طور پیش فرض از اولین عنصر یعنی اندیس صفرم شروع میشه و تا اندیس پایانی که توی آرگومان مشخص شده، برش زده میشه. و یه مثال دیگه هم بزنیم و این بحث رو تکمیل کنیم.

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
print(languages[1:])

اگه جای عدد دوم رو خالی بذاریم. برنامه به طور پیش‌فرض تا انتهای لیست رو در نظر نمیگیره. حالت‌های مختلفی رو بررسی کردیم. اما یه حالت دیگه مونده و اونم اینه که اگه عدد اول و دوم رو خالی بذاریم‌، اون وقت چی میشه؟ 
بله درسته. کل لیست رو در نظر می‌گیره. می‌تونید امتحان کنید. مثال پایین:

languages = [‘C#’,’Java’,’C’,’Python’,’C++’]
print(languages[:])

تاپل - Tuple

خب تا اینجا مثال‌های متنوعی از کار با لیست‌ها رو یاد گرفتیم. یه نوع دیگه‌ای هم وجود داره که به نام تاپل یا tuple. تاپل‌ها در واقع شبیه لیست‌ها هستند و تنها تفاوتشون اینه که نمیشه اونا رو تغییر داد و فقط برای بار اول تعریف میشند. اما مثل لیست‌ها میشه به مقادیرشون دسترسی داشت. و البته یه تفاوتی هم در سینتکس دارند و اون اینه که با () نشون داده میشن. در ادامه یه مثال از تاپل‌ها اومده:

tuple1 = (1, 3, 4)

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

خب، به پایان این مقاله رسیدیم. امیدوارم که مطالب جدیدی و مفیدی از این مقاله یاد گرفته باشین.


منبع: آموزش پایتون به زبان ساده: کار با لیست‌ها - وبسایت شخصی محمدحسین میثاق‌پور