نحوه ی ویرایش محتوای لیست ها در زبان برنامه نویسی پایتون


در آموزش های گذشته با مفهوم لیست ها و نحوه ی تعریف و دسترسی به محتوای درون آن ها در زبان برنامه نویسی Python آشنا شدیم. جالب است بدانید که پس از تعریف یک آبجکت یا شیء از نوع لیست، می توانید آن را بر اساس نیاز خود ویرایش کنید. ویرایش یک لیست می تواند به صورت تغییر یک آیتم خاص در آن، افزودن یک آیتم جدید به آن، یا حذف یک آیتم از اقلام آن باشد. در حقیقت به کمک فانکشن های از پیش تعریف شده در زبان پایتون که روی لیست ها عمل می کنند، می توانیم عملیات CRUD که عبارت است از Create یا «ایجاد»، Read یا «خواندن»، Update یا «به روزرسانی» و  Delete یا «حذف» را روی آن ها اجرا کنیم. در این آموزش به بررسی برخی از مهم ترین فانکشن های قابل استفاده روی لیست ها می پردازیم. برای شروع کار، متغیر list1 که به آبجکتی از نوع لیست منتسب شده است را در نظر بگیرید:

>>>list1 = []

همان طور که می بینید، این لیست هیچ عضوی ندارد. به هر حال، با استفاده از فانکشن ()len می توانیم تعداد اعضای لیست یا طول لیست (چون لیست ها از جنس دنباله هستند) را به دست آوریم:

>>>len(list1)
0

حال فرض کنید بخواهیم آیتم جدیدی به این لیست اضافه کنیم؛ برای این کار از فانکشن ()append به صورت زیر استفاده می کنیم:

>>> list1.append("egg")

به فرم نوشتن دستور بالا دقت کنید. فانکشن هایی مانند ()append روی یک نمونه آبجکت خاص از یک کلاس اجرا می شوند. برای استفاده از این نوع فانکشن ها، ابتدا آبجکت مورد نظر خود را می آوریم که در این جا آبجکت ارجاع داده شده به متغیر list1 است، سپس در ادامه ی آن یک علامت . می آوریم و آن گاه فانکشن مورد نظر را به همراه آرگومان های آن که در این جا ("append(“egg است می نویسیم (در آموزش های آینده با این نوع فراخوانی بیش تر آشنا خواهیم شد.) پس از اجرای دستور بالا، list1 را مجدداَ فراخوانی می کنیم تا ببینیم که با اثر دادن این فانکشن روی آن، چه تغییری در محتوای لیست صورت پیدا کرده است:

>>> list1
['egg']
>>> len(list1)
1

همان طور که در خروجی می بینید استرینگ 'egg' به list1 اضافه شده است و حالا طول این لیست که قبلاً 0 بود برابر با 1 است. بنابراین فانکشن ()append یک مقدار را در یک لیست ذخیره می کند. با استفاده از این فانکشن مقادیر دیگری را در لیست خود ذخیره می کنیم:

>>> list1.append("meet")
>>> list1.append("tea")
>>> list1.append("rice")
>>> list1
['egg', 'meet', 'tea', 'rice']

عضو سوم این لیست را در نظر بگیرید:

>>> list1[2]
'tea'
به خاطر داشته باشید
در زبان برنامه نویسی Python، شمارش اندیس لیست ها از عدد صفر آغاز می شود؛ لذا در مثال بالا برای دستیابی به عضو سوم، اندیس 2 را باید در نظر بگیریم.

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

>>> list1.insert(2,"bread")

همان طور که می بینید، فانکشن ()insert دو آرگومان ورودی می گیرد؛ آرگومان اول اندیس محل قرار گیری عضو جدید در لیست است که در این جا 2 را در نظر گرفته ایم و آرگومان دوم آن عضو جدیدی است که می خواهیم به لیست اضافه کنیم. اکنون با فراخوانی متغیر list1 تغییرات آن را پس از اثر دادن فانکشن ()insert می بینیم:

>>> list1
['egg', 'meet', 'bread', 'tea', 'rice']

حال دستور زیر را در نظر بگیرید:

>>> list2 = list1.copy()

در این دستور، متغیر جدیدی با شناسه ی list2 ایجاد کرده ایم و یک کپی از list1 را به آن ارجاع داده ایم. برای کپی کردن list1 از فانکشن copy استفاده کرده و آن را روی list1 اثر داده ایم. اکنون محتوای list2 به صورت زیر خواهد بود:

>>> list2
['egg', 'meet', 'bread', 'tea', 'rice']

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

>>> list2.remove("rice")

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

>>> list2
['egg', 'meet', 'bread', 'tea']
نکته
توجه داشته باشید که اگر بخواهیم آبجکتی را که عضو لیست نیست به عنوان آرگومان ورودی به فانکشن ()remove بدهیم، با خطا مواجه خواهیم شد.

برای تست کردن نکته ی بالا، اکنون استرینگ "rice" عضو list2 نیست، بنابراین با اجرای دستور

>>> list2.remove("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 تنها یک آرگومان ورودی می گیرد و نمی توان هم زمان چند عضو لیست را با استفاده از آن حذف کرد. 

در صورتی که بخواهیم تمام اعضای یک لیست را به محتوای لیست دیگری اضافه کنیم از دستور زیر استفاده می کنیم:

>>> list1.extend(list2)

فانکشن ()extend که در این جا list2 را به عنوان آرگومان خود گرفته است تمام اعضای آن را به انتهای list1 اضافه می کند. بنابراین داریم:

>>> list1
['egg', 'meet', 'bread', 'tea', 'rice', 'egg', 'meet', 'bread', 'tea']
>>> list2
['egg', 'meet', 'bread', 'tea']

حال دستور زیر را اجرا می کنیم:

>>> list1.pop()
'tea'

در این دستور از فانکشن ()pop استفاده کرده ایم و آن را روی list1 اعمال کرده ایم. خروجی این دستور، عضو آخر list1 یعنی استرینگ 'tea' است، با این حال فانکشن ()pop تنها برای دسترسی به عضو آخر لیست استفاده نمی شود و تغییرات دیگری نیز در لیست اعمال می کند. برای آن که متوجه این تغییرات شویم اجازه دهید نگاهی به محتوای list1 بیاندازیم:

>>> list1
['egg', 'meet', 'bread', 'tea', 'rice', 'egg', 'meet', 'bread']

همان طور که می بینید اثر دادن فانکشن pop روی list1 باعث شده عضو آخر آن که استرینگ 'tea' بود از لیست حذف شود. اگر بخواهیم تمام اعضای یک لیست را حذف کنیم از فانکشن ()clear استفاده می کنیم. دستور زیر را در نظر بگیرید:

>>> list1.clear()
>>> list1
[]
>>> len(list1)
0

همان طور که می بینید تمام اعضای list1 حذف شده اند و اکنون این لیست هیچ عضوی ندارد.  

در پایان هم خلاصه ای از کاربرد فانکشن های معرفی شده در این آموزش را می توانید در جدول زیر مطالعه نمایید:

نام فانکشن عملکرد
()append عضو جدیدی را به انتهای لیست اضافه می کند.
()clear تمام اعضای لیست را از آن حذف می کند.
()copy یک کپی از لیست می سازد و آن را در لیست جدیدی ذخیره می کند.
()extend اعضای یک لیست را به انتهای یک لیست موجود دیگر اضافه می کند.
()insert عضو جدیدی را در محل تعیین شده به لیست اضافه می کند.
()pop آخرین عضو لیست را از آن حذف می کند.
()remove عضو خاصی از لیست مشخص شده را حذف می کند.
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمان
باسلام
چطور میتونیم یه آرایه رو معکوس کنیم ؟
کاربر میهمان
کاربر میهمان
با سلام
اگه بخواهیم بدون استفاده از insert یه ارایه ای رو وارد لیست کنیم.چیکار باید انجام بدیم؟
فردی
فردی
با عرض ادب.
دستور خاصی برای اینکه اندیس n ام یک لیست را حذف کنیم وجود ندارد؟ یعنی باید در یک لیست طولانی متوجه باشیم که کدام ابجکت رو میخواهیم حذف کنیم؟ یعنی نمیتوان ابجکت هشتم را حذف کرد بدون انکه بدانیم.
محمدهادی
محمدهادی
جلسه قبل دسترسی به اعضای لیست رو یاد گرفتیم. مثلا [list[i عضو i ام از لیست رو نشون میده. حالا دستور زیر عضو i ام لیست رو حذف میکنه:
([list.remove(list[i

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام
میخاستم بپرسم اگر دو تا لیست داشته باشیم که اعضاش برابر باشن اما ترتیبشون نه و برای ما ترتیب مهم نباشه و این دوتا لیست رو برابر بدونیم باید چیکار کنیم که برنامه هم برابر بدونتشون؟