در آموزشهای گذشته با مفهوم لیستها، نحوۀ تعریف و دسترسی به محتوای درون آنها در زبان برنامهنویسی پایتون آشنا شدیم و در این آموزش قصد داریم تا با روشهایی به منظور ویرایش محتوای آنها آشنا شویم. در واقع، پس از تعریف یک آبجکت از نوع لیست میتوانیم آن را بر اساس نیاز خود ویرایش کنیم و عملیاتی همچون تغییر یک آیتم خاص، افزودن آیتمی جدید و حذف یکسری آیتم از آن را روی لیست مد نظر اِعمال کنیم.
در حقیقت، به کمک یکسری فانکشن از پیش تعریفشده در زبان پایتون میتوانیم اصطلاحاً عملیات 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 عضو خاصی از لیست مشخصشده را حذف میکند.