در پایتون، لیستها (Lists) یکی از پرکاربردترین ساختمان دادهها هستند. برای کار با این لیستها، پایتون مجموعهای از توابع داخلی (Built-in Methods) را ارائه میدهد که به ما اجازه میدهد عناصر را اضافه، حذف، جستجو یا مرتب کنیم. در این مقاله به صورت کاملاً جامع تمام این متدها را بررسی میکنیم.

سطح مقدماتی (Beginner Level)
در این سطح، با نحوه عملکرد متدهای اصلی لیست آشنا میشویم. به یاد داشته باشید که اکثر متدهای لیست، تغییرات را درجا (In-place) اعمال میکنند؛ یعنی لیست اصلی تغییر میکند و نیازی نیست نتیجه را در متغیر جدیدی ذخیره کنید.
۱. اضافه کردن عناصر (Adding Elements)
برای اضافه کردن داده به لیست، سه متد اصلی وجود دارد: append، extend و insert.
متد append()
این متد یک عنصر را دقیقاً به انتهای لیست اضافه میکند.
# Static Syntax (Snippet)
# list.append(item)
متد extend()
اگر بخواهید عناصر یک لیست دیگر (یا هر iterable دیگری) را تکتک به انتهای لیست فعلی بچسبانید، از این متد استفاده میکنید.
متد insert()
این متد عنصر را در یک ایندکس (Index) مشخص قرار میدهد و بقیه عناصر را به جلو هل میدهد.
# Static Syntax
# list.insert(index, element)
۲. حذف کردن عناصر (Removing Elements)
برای حذف، متدهای remove، pop و clear کاربرد دارند.
متد remove()
اولین عنصری که مقدارش با ورودی تابع برابر باشد را حذف میکند. اگر عنصر وجود نداشته باشد، خطا (Error) میدهد.
متد pop()
عنصر موجود در ایندکس مشخص شده را حذف میکند و آن را برمیگرداند (Return میکند). اگر ایندکس ندهیم، آخرین عنصر را حذف میکند.
متد clear()
تمام عناصر لیست را حذف کرده و لیست را خالی میکند.
۳. جستجو و اطلاعات (Information & Search)
متد index()
شماره ایندکس اولین مکانی که مقدار مورد نظر یافت شود را برمیگرداند.
متد count()
تعداد دفعات تکرار یک مقدار خاص در لیست را میشمارد.
۴. مرتبسازی و معکوس کردن (Ordering)
متد sort()
لیست را به صورت صعودی یا نزولی مرتب میکند. این متد لیست اصلی را تغییر میدهد.
متد reverse()
ترتیب عناصر لیست را کاملاً برعکس میکند (بدون مرتبسازی، فقط سروته کردن).
سطح پیشرفته (Professional Level)
در این بخش به نکات فنی، مدیریت حافظه، تفاوتهای ظریف و Performance متدها میپردازیم.
۱. تفاوت copy() و کپی ارجاعی (Shallow Copy)
زمانی که مینویسید list2 = list1، شما کپی ایجاد نمیکنید، بلکه ارجاع (Reference) میدهید. برای کپی واقعی سطح اول (Shallow Copy) باید از متد copy() استفاده کنید.
۲. مرتبسازی پیشرفته با key
متد sort() پارامتری به نام key میگیرد که یک تابع است. پایتون قبل از مقایسه هر عنصر، این تابع را روی آن اجرا میکند.
# Static Snippet: Sort by length of string
names = ["Alexander", "Bob", "Catherine"]
names.sort(key=len)
# Result: ['Bob', 'Alexander', 'Catherine'] (sorted by length)
۳. نکات پرفورمنس (Big O Notation)
به عنوان یک برنامهنویس حرفهای باید هزینه زمانی (Time Complexity) متدها را بدانید:
append(): دارای پیچیدگی O(1) است. بسیار سریع است زیرا فقط به انتهای حافظه اضافه میکند.insert(0, item): دارای پیچیدگی O(n) است. بسیار کند است زیرا باید تمام عناصر لیست را یک خانه به جلو شیفت دهد. اگر نیاز به اضافه کردن مداوم به ابتدای لیست دارید، ازcollections.dequeاستفاده کنید.pop()(آخر): دارای پیچیدگی O(1).pop(0)(اول): دارای پیچیدگی O(n) (به دلیل شیفت دادن بقیه عناصر).len(list): دارای پیچیدگی O(1) (پایتون طول لیست را همیشه ذخیره دارد و نمیشمارد).
۴. متدها و مقدار بازگشتی (The None Return Trap)
بسیاری از مبتدیان سعی میکنند نتیجه sort() یا append() را در یک متغیر بریزند، که منجر به خطای منطقی میشود.
نکته حرفهای: اگر میخواهید لیست اصلی دستنخورده باقی بماند و یک نسخه مرتب شده جدید داشته باشید، از تابع sorted() (که بیلت-این پایتون است و نه متد لیست) استفاده کنید:
# Static Snippet
new_list = sorted(original_list) # Returns a new list