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

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

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

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

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

توضیح:
خب ابتدا بیایم که با نحوه‌ی تعریف لیست‌ها یا اصطلاحا سینتکس اونا آشنا بشیم.

  • همون‌طور که می‌بینید لیست‌ها هم مثل متغیرها دارای یه نام در ابتدا هستند و اختیاری هستند ولی توصیه میشه که از نام‌های جمع استفاده بشه تا خوانایی برنامه هم بیشتر باشه.
  • نحوه‌ی نمایش لیست‌ها با کاراکترهای [ ] مشخص میشند و عناصر ما داخل اونها قرار می‌گیرند.
  • عناصر لیست حتما باید با کاراکتر کاما , از هم دیگه جدا بشن. اگه احیانا جایی یادتون رفت کاما بذارین، برنامه‌تون با خطا مواجه میشه.
  • عناصر لیست‌تون میتونه هر چیزی باشه و برای مثال فقط منحصر به رشته‌ها نیست. مثلا میتونه لیستی از اعداد باشه. مثلا:
list1 = [1, 2, 3, 5]

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

ساده ترین چیز اینه که شما کل لیست‌تون رو چاپ کنید. مثال زیر:

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

دسترسی به عناصر یک لیست

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

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

اگه کدتون رو اجرا کنید متوجه میشین که مقدار ‘C++’ به عنوان خروجی نشون داده شده.
به نظرتون جایی اشتباه رخ نداده؟
مگه اولین آیتم لیست ‘C‘ نیستش؟
پس چرا اونو نشون نداده؟
به نظر شما کامپیوتر اشتباه کرده؟

اندیس‌ها از صفر شروع میشن، نه یک

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

اندیس‌های منفی

یکی از ویژگی‌های جالب زبان پایتون کار با اندیس‌های منفی هستش.
اندیس منفی دیگه یعنی چه؟
مگه عناصر از صفر شروع نمیشن؟
چرا. اما اندیس گذاری منفی یه نوع شماره گذاری معکوس هستش. یعنی چی؟
یعنی از آخر شروع می کنه به اول. به عبارتی ترتیب شمارش برعکسه
مثلا آخرین آیتم لیست رو میشه با اندیس 1- نشون داد. مثال زیر:

print(languages[-1])

یا مثلا یکی مونده با آخری رو میشه با اندیس 2- نشون داد و به همین ترتیب برای عناصر دیگه.

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

مثلا بیاین که مقدار عنصر اول لیست رو تغییر بدیم و دوباره اونو چاپ کنیم:

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

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

افزودن آیتم جدید به لیست

افزودن عنصر به آخر لیست به کمک تابع append

این تابع عناصر جدید رو به آخر لیست اضافه می کنه. مثال زیر:

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

افزودن عنصر به موقعیت دلخواه در لیست به کمک تابع insert

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

  • اولی برای شماره اندیسی هستش که میخوایم عنصرمون تو اون موقعیت باشه.
  • و دومی هم مقدار اون آیتم موردنظر.

به مثال زیر توجه کنید:

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

به غیر از اضافه‌کردن ما گاهی اوقات قصد داریم که برخی از عناصر رو از لیست‌مون حذف کنیم. برای این منظور می‌تونیم از چند تا روش استفاده کنیم.

حذف عنصر از لیست

حذف یک عنصر با استفاده از عبارت del

با استفاده از عبارت del میشه به دو صورت عملیات حذف رو انجام داد:
یه عنصر خاصی از لیست رو با مشخص کردن اندیس‌اش حذف کرد. مثال زیر:

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

یه کاربرد دیگه‌اش هم این هستش که کل لیست رو یک جا حذف کنه. در این حالت دیگه نیازی به مشخص کردن اندیس نیست. مثال زیر:

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

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

حذف کردن یک عنصر با استفاده از تابع pop

تابع pop یه تفاوتی نسبت به del داره و اون این هستش که بعد از حذف یه آیتم از لیست، می‌تونیم اون آیتم رو در یه متغیر دیگه‌ای ذخیره کنیم. البته ذخیره عنصر حذف شده در آیتم یه کار اختیاری هستش و می‌تونید انجام ندید.
شما با استفاده از تابع pop به دو صورت می‌تونید عناصر رو از لیست حذف کنید.

حذف آخرین عنصر از لیست

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

همون‌طور که در مثال بالا می‌بینید ما از متد pop بدون آرگومان استفاده کردیم. و از طرفی عنصر حذ‌ف‌شده رو هم داخل یه متغیر با نام deleted_lan ذخیره کردیم.

حذف عنصر از مکان دلخواه

در بعضی مواقع ما قصد داریم که یه عنصر از اندیس دلخواهی از لیست رو حذف کنیم. مثلا عنصر اول. در اینجا هم از همون متد pop استفاده میشه اما اینبار بهش یه ورودی داده میشه که در واقع اندیس مورد نظر ماست. به مثال زیر توجه کنین:

languages = [‘C’,’C++’,’C#’,’Java’,’Python’]
print(languages)
deleted_lan = languages.pop(0)
print(deleted_lan)
print(languages)

حذف عنصر با استفاده از مقدار - تابع remove

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

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

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

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

مرتب‌سازی لیست‌ها

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

در مرتب‌سازی دائمی ترتیب کل لیست عوض میشه، اما در مرتب‌سازی موقت، مثلا برای نمایش استفاده میشه اما ترتیب عناصر تغییری پیدا نمی‌کنه.

مرتب‌سازی دائمی به کمک متد sort

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

اگه مثال بالا رو اجرا کنید، متوجه میشین که ترتیب عناصر در خروجی دوم تغییر کرده.

مرتب‌سازی موقت به کمک تابع sorted

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

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

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


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