مقدمه

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

تغییر آیتم‌های موجود در لیست

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

Copy Icon python_lists.py
countries = ['Germany', 'England', 'Spain', 'Italy']
print(countries)
            
countries[2] = 'France'
print(countries)

نتیجه‌ی اجرای این کد نشان می‌دهد که عنصر سوم لیست نغییر کرده و مقدار جدیدی را دریافت کرده است.

['Germany', 'England', 'Spain', 'Italy']
['Germany', 'England', 'France', 'Italy']
          

اضافه‌کردن آیتم‌های جدید به لیست

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

اضافه‌کردن آیتم به انتهای لیست

همانطور که گفته شد، برای افزودن یک آیتم جدید به انتهای لیست، از متدی با نام append() استفاده می‌شود. کافیست مقدار آیتم جدید را به عنوان آرگومان این متد وارد کنیم.

Copy Icon python_lists.py
countries = ['Germany', 'England', 'Spain', 'Italy']
print(countries)
            
countries.append('Japan')
print(countries)

اگر این کد را اجرا کنیم، خواهیم دید که آیتم جدید به انتهای لیست اضافه شده است.

['Germany', 'England', 'Spain', 'Italy']
['Germany', 'England', 'Spain', 'Italy', 'Japan']
          

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

Copy Icon python_lists.py
countries = []
countries.append('England')
countries.append('Germany')
countries.append('Spain')
            
print(countries)

اضافه‌کردن آیتم به محل دلخواهی از لیست

اگر بخواهیم آیتم جدیدی را به یک مکان مشخص از لیست اضافه کنیم، می‌توانیم از متد insert() استفاده کنیم. فرم کلی این متد به صورت list.insert(index, item) است که در آن، index تعیین‌کننده‌ی مکان آیتم جدید و item مقدار این آیتم است.

Copy Icon python_lists.ejs
countries = ['England', 'Spain', 'Japan']
print(countries)
            
countries.insert(1, 'France')
print(countries)

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

['England', 'Spain', 'Japan']
['England', 'France', 'Spain', 'Japan']
          

حذف آیتم‌های لیست

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

حذف بر اساس مکان آیتم

اگر بخواهیم یک آیتم را از لیست حذف کنیم و مکان این آیتم را بدانیم، می‌توانیم مانند مثال زیر از یک گزاره‌ی del استفاده کنیم.

Copy Icon python_lists.py
countries = ['England', 'Spain', 'Germany', 'France']
print(countries)
            
del countries[2]
print(countries)

اگر این کد را اجرا کنید، خواهید دید که آیتم دارای اندیس 2 یعنی Germany از لیست حذف شده است.

['England', 'Spain', 'Germany', 'France']
['England', 'Spain', 'France']
          

وقتی مقداری را با استفاده از یک گزاره‌ی del از لیستی حذف کنیم، دیگر راهی برای دسترسی به آن مقدار نخواهیم داشت. اما گاهی اوقات می‌خواهیم مقداری را از لیست حذف کنیم اما همچنان به آن مقدار دسترسی داشته باشیم. مثلاً در یک بازی که گیمر در حال از بین بردن موجودات بیگانه است، وقتی موجودی کشته می‌شود، به مختصات x و y نقطه‌ی مرگ موجود نیاز داریم تا مثلاً شکل یک انفجار را در آن نقطه ترسیم کنیم. یا به عنوان مثالی دیگر، در یک اپ وب ممکن است بخواهیم یک کاربر را از لیست کاربران فعال حذف کنیم اما به جای حذف داٌمی آن کاربر، آن را به لیست کاربران غیرفعال اضافه کنیم. در این دست موارد، می‌توانیم از متد pop() استفاده کنیم.

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

Copy Icon python_lists.py
brands = ['Acer', 'Dell', 'Asus', 'Sony']
print(brands) 
            
first_owned = brands.pop(0)
last_owned = brands.pop()

print(f"The first laptop I owned was a {first_owned}.")
print(f"The last laptop I owned was a {last_owned}.")
print(brands)

حذف بر اساس مقدار آیتم

گاهی اوقات مکان آیتمی را که قصد داریم حذف کنیم، نمی‌دانیم اما مقدارش را می‌دانیم. در این موارد، می‌توانیم از متدی با نام remove() برای حذف آیتم مورد نظر استفاده کنیم.

Copy Icon python_lists.py
countries = ['England', 'Spain', 'Germany', 'France'] 
print(countries)
            
countries.remove('Spain')
print(countries)

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

Copy Icon python_lists.py
brands = ['Acer', 'Dell', 'Ass', 'Sony', 'Apple']
print(brands)
            
top_expensive = 'Apple'
brands.remove(top_expensive)
print(brands)
print(f"{too_expensive} is too expensive for me.")

در مورد متد remove() باید به یک نکته‌ی مهم توجه داشته باشید. اگر در یک لیست بیش از یک آیتم با مقداری مثل X داشته باشیم، متد remove(X) فقط اولین آیتم دارای مقدار X را حذف می‌کند. اگر بخواهیم همه‌ی آیتم‌های دارای یک مقدار مشخص را از یک لیست حذف کنیم، باید از یک حلقه استفاده کنیم. با حلقه‌ها در فصل هفتم آشنا می‌شویم.