نوع داده list متدهای بیشتری دارد. در اینجا تمام متدهای اشیاء لیست آورده شده است:
list.append(value): یک آیتم به انتهای لیست اضافه میکند. مشابه a[len(a):] = [x].list.extend(iterable): لیست را با اضافه کردن تمام آیتمهای iterable گسترش میدهد. مشابه a[len(a):] = iterable.list.insert(index, value): یک آیتم را در یک موقعیت داده شده درج میکند. آرگومان اول اندیس عنصری است که قبل از آن درج میشود.list.remove(value): اولین آیتمی از لیست که مقدارش برابر value است حذف میکند. اگر چنین آیتمی وجود نداشته باشد ValueError ایجاد میکند.list.pop(index=-1): آیتم در موقعیت داده شده را حذف و برگرداند. اگر اندیسی مشخص نشود، pop() آخرین آیتم را حذف و برمیگرداند.list.clear(): تمام آیتمها را از لیست حذف میکند. مشابه del a[:].list.index(value[, start[, stop]]): اندیس مبتنی بر صفر اولین وقوع value در لیست را برمیگرداند. اگر چنین آیتمی وجود نداشته باشد ValueError ایجاد میکند.list.count(value): تعداد دفعات ظاهر شدن value در لیست را برمیگرداند.list.sort(*, key=None, reverse=False): آیتمهای لیست را در جا مرتب میکند.list.reverse(): عناصر لیست را در جا معکوس میکند.list.copy(): کپی سطحی از لیست برمیگرداند. مشابه a[:].مثالی که اکثر متدهای لیست را استفاده میکند:
>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.count('apple')
2
>>> fruits.count('tangerine')
0
>>> fruits.index('banana')
3
>>> fruits.index('banana', 4) # پیدا کردن موز بعدی از موقعیت ۴
6
>>> fruits.reverse()
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
>>> fruits.append('grape')
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
>>> fruits.sort()
>>> fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
>>> fruits.pop()
'pear'
ممکن است متوجه شده باشید متدهایی مانند insert، remove یا sort که فقط لیست را تغییر میدهند مقدار بازگشتی چاپ شده ندارند — آنها None پیشفرض را برمیگردانند [۱]. این یک اصل طراحی برای تمام ساختارهای داده تغییرپذیر در پایتون است.
چیز دیگری که ممکن است متوجه شوید این است که همه دادهها قابل مرتبسازی یا مقایسه نیستند. برای مثال، [None, 'hello', 10] مرتب نمیشود زیرا اعداد صحیح قابل مقایسه با رشتهها نیستند و None با انواع دیگر قابل مقایسه نیست. همچنین، برخی انواع رابطه ترتیبی تعریف شده ندارند. برای مثال، 3+4j < 5+7j یک مقایسه معتبر نیست.
متدهای لیست استفاده از لیست به عنوان پشته (stack) را بسیار آسان میکنند، جایی که آخرین عنصر اضافه شده اولین عنصر بازیابی شده است ("آخرین وارد، اولین خارج"). برای اضافه کردن آیتم به بالای پشته از append() استفاده کنید. برای بازیابی آیتم از بالای پشته از pop() بدون اندیس صریح استفاده کنید. به عنوان مثال:
>>> stack = [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> stack [3, 4, 5, 6, 7] >>> stack.pop() 7 >>> stack [3, 4, 5, 6] >>> stack.pop() 6 >>> stack.pop() 5 >>> stack [3, 4]
امکان استفاده از لیست به عنوان صف (queue) نیز وجود دارد، جایی که اولین عنصر اضافه شده اولین عنصر بازیابی شده است ("اولین وارد، اولین خارج")؛ با این حال، لیستها برای این هدف کارآمد نیستند. در حالی که اضافه کردن و خارج کردن از انتهای لیست سریع است، درج یا خارج کردن از ابتدای لیست کند است (زیرا تمام عناصر دیگر باید یکی جابجا شوند).
برای پیادهسازی صف، از collections.deque استفاده کنید که برای اضافه و خارج کردن سریع از هر دو انتها طراحی شده است. به عنوان مثال:
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # تری میرسد
>>> queue.append("Graham") # گراهام میرسد
>>> queue.popleft() # اولین نفری که رسید حالا میرود
'Eric'
>>> queue.popleft() # دومین نفری که رسید حالا میرود
'John'
>>> queue # صف باقیمانده به ترتیب رسیدن
deque(['Michael', 'Terry', 'Graham'])
فهرستهای توصیفی روش مختصری برای ایجاد لیستها فراهم میکنند. کاربردهای رایج ایجاد لیستهای جدیدی است که هر عنصر نتیجه عملیاتی باشد که روی هر عضو توالی یا iterable دیگری اعمال شده، یا ایجاد زیرتوالی از عناصری که یک شرط خاص را برآورده میکنند.
به عنوان مثال، فرض کنید میخواهیم لیستی از مربعها ایجاد کنیم:
>>> squares = [] >>> for x in range(10): ... squares.append(x**2) ... >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
میتوانیم بدون عوارض جانبی لیست مربعها را محاسبه کنیم با استفاده از:
squares = list(map(lambda x: x**2, range(10)))
یا معادل آن:
squares = [x**2 for x in range(10)]
که مختصرتر و خواناتر است.
یک فهرست توصیفی از براکتهایی حاوی یک عبارت که با بند for دنبال میشود تشکیل شده، و سپس صفر یا چند بند for یا if. نتیجه لیست جدیدی خواهد بود حاصل از ارزیابی عبارت در بافت بندهای for و if که بعد از آن میآیند. به عنوان مثال، این listcomp عناصر دو لیست را اگر برابر نباشند ترکیب میکند:
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
توجه کنید که ترتیب بندهای for و if در هر دو قطعه کد یکسان است.
مثالهای بیشتر:
>>> vec = [-4, -2, 0, 2, 4] >>> [x*2 for x in vec] # ایجاد لیست جدید با مقادیر دوبرابر [-8, -4, 0, 4, 8] >>> [x for x in vec if x >= 0] # فیلتر کردن اعداد منفی [0, 2, 4] >>> [abs(x) for x in vec] # اعمال تابع روی همه عناصر [4, 2, 0, 2, 4] >>> [(x, x**2) for x in range(6)] [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
عبارت اولیه در یک فهرست توصیفی میتواند هر عبارت دلخواهی باشد، از جمله فهرست توصیفی دیگر.
مثال ماتریس ۳ در ۴:
>>> matrix = [ ... [1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12], ... ] >>> [[row[i] for row in matrix] for i in range(4)] [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
در دنیای واقعی، بهتر است توابع داخلی را به جای دستورات جریانی پیچیده ترجیح دهید. تابع zip() برای این مورد عالی عمل میکند:
>>> list(zip(*matrix)) [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
برای جزئیات درباره ستاره در این خط، «بازپاکسازی لیستهای آرگومان» را ببینید.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial