در آموزشهای گذشته با مفهوم لیستها، نحوۀ تعریف و دسترسی به محتوای درون آنها در زبان برنامهنویسی پایتون آشنا شدیم و در این آموزش قصد داریم تا با روشهایی به منظور ویرایش محتوای آنها آشنا شویم. در واقع، پس از تعریف یک آبجکت از نوع لیست میتوانیم آن را بر اساس نیاز خود ویرایش کنیم و عملیاتی همچون تغییر یک آیتم خاص، افزودن آیتمی جدید و حذف یکسری آیتم از آن را روی لیست مد نظر اِعمال کنیم.
در حقیقت، به کمک یکسری فانکشن از پیش تعریفشده در زبان پایتون میتوانیم اصطلاحاً عملیات CRUD را انجام دهیم که سرواژۀ عبارات Create به معنی «ایجاد»، Read یا «خواندن»، Update یا «بهروزرسانی» و Delete به معنی «حذف» است. در همین راستا، برخی از مهمترین فانکشنهای Built-in (از پیش تعریفشده) به منظور انجام عملیات فوقالذکر روی آبجکتهایی از جنس لیست را معرفی خواهیم کرد اما در ابتدا لازم است تا متغیری با نام دلخواه همچون list1 تعریف کرده و آن را به آبجکتی از نوع لیست منتسب کنیم که برای این منظور داریم:
>>> list1 = []
در کد فوق لیستی تعریف کردهایم که هیچ عضوی ندارد اما به هر حال با بهکارگیری فانکشن ()len میتوانیم تعداد اعضای لیست یا به عبارت بهتر، طول آن را به دست آوریم چرا که لیستها آبجکتهایی از جنس دنباله هستند که برای این منظور کد زیر را مد نظر قرار میدهیم:
>>> len(list1)
0
همانطور که انتظار داشتیم، فانکشن()len با آرگومان ورودی list1 عدد 0 را در خروجی ریترن میکند چرا که لیست مد نظر هیچ عضوی نداشته و طول آن 0 است. حال اگر بخواهیم آیتم جدیدی به لیست فوق اضافه کنیم، فانکشن ()append را مورد استفاده قرار میدهیم که به عنوان یک مثال کد زیر را در ادامه آوردهایم:
>>> list1.append("egg")
در تفسیر کد فوق باید بگوییم که فانکشنهایی همچون ()append روی یک نمونه آبجکت خاص از کلاس مد نظر فراخوانی میشوند؛ به عبارت بهتر، برای بهکارگیریِ این نوع فانکشنها ابتدا آبجکت مربوطه و به دنبال آن علامت . و در ادامه فانکشن مذکور را به همراه آرگومان ورودیاش فراخوانی میکنیم و همانطور که میبینید، فانشکن ()append را در این مثال به منظور افزودن یکسری آیتم دلخواه به انتهای لیست مد نظر روی آبجکت list1 فراخوانی کردهایم که در آموزشهای آینده با این شیوۀ فراخوانی بیشتر آشنا خواهیم شد. در ادامه دستور فوق را اجرا میکنیم و برای اینکه ببینیم چه تغییراتی روی محتوای آبجکت list1 اِعمال شده، خروجی زیر را مد نظر قرار میدهیم:
>>> list1
['egg']
>>> len(list1)
1
با اجرای کد فوق استرینگ «egg» به آبجکت list1 افزوده شده است که مسلماً طول لیست مذکور به عدد 1 افزایش پیدا میکند و همانطور که میبینید، فراخوانی فانکشن ()len با آرگومان ورودی list1 منجر به بازگرداندن عدد 1 در خروجی شده است. حال یکسری آیتم دیگر به صورت زیر به لیست خود اضافه میکنیم:
>>> list1.append("meet")
>>> list1.append("tea")
>>> list1.append("rice")
>>> list1
['egg', 'meet', 'tea', 'rice']
با اجرای کد فوق آیتمهای مد نظر به لیست افزوده شدهاند و همانطور که میبینید، محتوای آبجکت list1 لیستی متشکل از تمامی آیتمهای مذکور بوده که در معرض دیدمان قرار گرفتهاند. حال فرض کنید بخواهیم به عضو سوم این لیست دسترسی پیدا کنیم که برای این منظور کافی است تا کد زیر را اجرا کنیم:
>>> list1[2]
'tea'
همانطور که در آموزشهای گذشته اشاره کردیم، در زبان برنامهنویسی پایتون شمارش اندیس لیستها از عدد 0 آغاز میشود و از همین روی در مثال بالا برای دستیابی به عضو سوم باید اندیس 2 را وارد کنیم. حال اگر بخواهیم آیتمی جدید به لیست اضافه کنیم به طوری که دقیقاً در یک اندیس خاص از لیست مذکور قرار گیرد، فانکشن ()insert را به صورت زیر مورد استفاده قرار میدهیم:
>>> list1.insert(2, "bread")
در کد فوق فانکشن ()insert را با دو آرگومان ورودی فراخوانی کردهایم که آرگومان اول اندیس محل قرارگیری آیتم جدید در لیست را نشان میدهد و آرگومان دوم بیانکنندۀ آیتم جدیدی است که میخواهیم به لیست اضافه کنیم؛ بنابراین با اجرای کد فوق آیتم «bread» به لیست جدید و در خانهای با اندیس شمارۀ 2 قرار خواهد گرفت (در واقع علت اینکه از فانکشن ()append استفاده نکردیم این بود که فانکشن مذکور آیتمهای مد نظر را به انتهای لیست اضافه میکند.) اکنون محتوای آبجکت list1 را پس از اِعمال تغییرات مذکور میبینیم به طوری که آیتم مربوط به اندیس شمارۀ 2 استرینگ «bread» میباشد:
>>> list1
['egg', 'meet', 'bread', 'tea', 'rice']
از جمله دیگر فانکشنهای به اصطلاح Built-in در زبان برنامهنویسی پایتون به منظور اِعمال روی آبجکتهای از جنس لیست میتوان به فانکشنی تحت عنوان ()copy اشاره کرد که غالباً به منظور اِعمال تغییرات موقت روی لیستها مورد استفاده قرار میگیرد به طوری که لیست اصلی دچار تغییر نشده و محتوای آن حفظ میگردد و حتی میتوان لیست دوم را پس از ارزیابی فرآیندهای مربوطه حذف کرد یا محتوای آن را مجدداً در لیست اولیه کپی کرد که برای آشنایی بیشتر با نحوۀ عملکرد این فانکشن کد زیر را در نظر میگیریم:
>>> list2 = list1.copy()
در واقع، متغیری جدید با شناسۀ list2 ایجاد کرده و یک کپی از محتوای آبجکت list1 را به آن ارجاع دادهایم که از همین روی محتوای list2 بدین صورت خواهد بود:
>>> list2
['egg', 'meet', 'bread', 'tea', 'rice']
همانطور که اشاره کردیم، در صورت نیاز میتوانیم تغییرات مد نظر خود را روی لیست دوم اِعمال کنیم. برای مثال، فرض کنید بخواهیم آیتم آخر مربوط به آبجکت list2 را حذف کنیم که برای این منظور بدین ترتیب عمل میکنیم:
>>> list2.remove("rice")
در کد فوق فانکشن ()remove را روی آبجکت list2 فراخوانی کرده و آیتم «rice» را از لیست حذف کردهایم بدین صورت که آیتم مد نظر خود را به عنوان آرگومان ورودی به فانکشن داده و آن را روی آبجکت مربوطه فراخوانی کردهایم اما توجه داشته باشیم که آرگومان ورودی اندیس آیتم مد نظر از لیست مذکور نبوده و استرینگ مربوط به خود آیتم میباشد که بدین ترتیب محتوای list2 پس از اِعمال تغییر به صورت زیر میباشد:
>>> list2
['egg', 'meet', 'bread', 'tea']
همانطور که ملاحظه میشود آیتم «rice» از لیست حذف شده است اما توجه داشته باشیم که اگر بخواهیم آبجکتی را به عنوان آرگومان ورودی به فانکشن ()remove بدهیم که عضو لیست نیست یا به عبارت بهتر، آیتمی را از لیست حذف کنیم که وجود خارجی ندارد، با خطا مواجه خواهیم شد که برای تست این موضوع در ادامه سعی میکنیم آیتم «rice» که دیگر وجود خارجی ندارد را مجدداً از list2 حذف کنیم:
>>> list2.remove("rice")
همانطور که میدانیم، آیتم «rice» قبلاً از لیست فوقالذکر حذف شده است و از همین روی اجرای کد فوق منجر به خطایی بدین صورت خواهد شد:
Traceback (most recent call last):
File "<pyshell#21>", line 1, in
list2.remove("rice")
ValueError: list.remove(x): x not in list
سطر آخر از ارور فوق به این نکته اشاره دارد که آرگومان ورودی به فانکشن ()remove در لیست مربوطه وجود ندارد (دقت داشته باشیم که فانکشن ()remove تنها یک آرگومان ورودی میگیرد و نمیتوان همزمان چند عضو لیست را با بهکارگیریِ آن حذف کرد.)
اکنون اگر بخواهیم تمامی محتوای یک لیست را به لیستی دیگر بیفزاییم، برای این منظور فانکشن ()extend را مورد استفاده قرار میدهیم. به عنوان مثال، در ادامه قصد داریم تا محتوای آبجکت list2 را به list1 اضافه کنیم:
>>> list1.extend(list2)
همانطور که میبینید، فانکشن ()extend آبجکت list2 را به عنوان آرگومان ورودی گرفته و تمامی آیتمهای آن را به انتهای لیست list1 اضافه کرده است و اگر بخواهیم محتوای هر یک را در خروجی ریترن کنیم، خواهیم داشت:
>>> list1
['egg', 'meet', 'bread', 'tea', 'rice', 'egg', 'meet', 'bread', 'tea']
>>> list2
['egg', 'meet', 'bread', 'tea']
در واقع، محتوای list2 به انتهای list1 افزوده شده و آبجکتی با شناسۀ یکسان اما محتوای جدید از جنس لیست را تشکیل داده است. در ادامه فانکشن دیگری تحت عنوان ()pop را معرفی میکنیم که به منظور دسترسی به آخرین آیتم از آبجکت مد نظر مورد استفاده قرار میگیرد و همچنین آیتم مذکور را به طور کلی از لیست مربوطه حذف میکند که برای بررسی نحوۀ عملکرد این فانکشن، کد زیر را در ادامه آوردهایم:
>>> list1.pop()
'tea'
در کد فوق فانکشن ()pop را روی آبجکت list1 فراخوانی کردهایم به طوری که خروجی حاصل از آن آیتم آخر از list1 یا استرینگ «tea» میباشد و همانطور که گفتیم این فانکشن آیتم مربوطه را از لیست list1 نیز حذف میکند که برای این منظور محتوای list1 را پس از اِعمال تغییرات مذکور مورد بررسی قرار میدهیم:
>>> list1
['egg', 'meet', 'bread', 'tea', 'rice', 'egg', 'meet', 'bread']
همانطور که میبینید، اِعمال فانکشن ()pop روی list1 منجر به حذف استرینگ «tea» از لیست مذکور شده است و چنانچه بخواهیم تمامی اعضای لیست را از آن حذف کنیم، فانکشنی تحت عنوان ()clear را مورد استفاده قرار میدهیم:
>>> list1.clear()
>>> list1
[]
>>> len(list1)
0
همانطور که میبینید، تمامی اعضای آبجکت list1 حذف شدهاند و اکنون لیست مذکور هیچ عضوی ندارد و از همین روی فراخوانی فانکشن ()len با آرگومان ورودی list1 منجر به چاپ عدد 0 در خروجی میشود.
به عنوان خلاصهای از نحوۀ عملکرد تمامی فانکشنهای معرفیشده در این آموزش، میتوانیم جدول زیر را مد نظر قرار دهیم:
نام فانکشن عملکرد ()append عضو جدیدی را به انتهای لیست اضافه میکند. ()clear تمامی اعضای لیست را از آن حذف میکند. ()copy یک کپی از لیست ساخته و آن را در لیست جدیدی ذخیره میکند. ()extend اعضای یک لیست را به انتهای یک لیست موجود دیگر اضافه میکند. ()insert عضو جدیدی را در محل تعیینشده به لیست اضافه میکند. ()pop آخرین عضو لیست را از آن حذف میکند. ()remove عضو خاصی از لیست مشخصشده را حذف میکند.