Python - List Comprehension

List Comprehension

List Comprehension یک نوشتار کوتاه‌تر را برای ایجاد یک لیست جدید بر اساس مقادیر یک لیست موجود ارائه می‌کند.

برای درک بهتر، مسئله را با یک مثال توضیح می‌دهیم. فرض کنید که بر اساس یک لیست که شامل اسامی میوه است، می‌خواهید یک لیست جدید ایجاد کنید که تنها شامل میوه‌هایی باشد که دارای حرف "a" باشند. بدون استفاده از List Comprehension باید یک دستور for که داخل آن یک تست کننده شرایط است، بنویسید.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
    if "a" in x:
        newlist.append(x)
print(newlist)

خروجی:

با استفاده از List Comprehension می‌توانید همه این کارها را در یک خط انجام دهید.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)

خروجی:

نوشتار

newlist = [expression for item in iterable if condition == True]

مقدار برگردانده شده یک لیست جدید است و لیست قدیمی بدون تغییر خواهد ماند.

شرایط

شرط (condition) یا شرایط به مانند یک فیلتری است که تنها مقادیری را که True باشند، قبول می‌کند. برای مثال کد زیر تنها آیتم‌هایی را قبول می‌کند که مقدار آن‌ها برابر "apple" نباشد.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if x != "apple"]
print(newlist)

خروجی:

.

شرط if x != "apple" برای همه عناصر به غیر از "apple" مقدار True را برمی‌گرداند. در نتیجه خروجی یک لیست جدید شامل همه میوه‌ها به جز "apple" خواهد بود.

داشتن شرط اختیاری است و می‌توان آن را ننوشت.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits]
print(newlist)

خروجی:

تکرارپذیر

تکرارپذیر (iterable) می‌تواند از هر نوعی باشد؛ لیست، تاپل و ...

در مثال زیر از تابع range() برای ایجاد یک تکرارپذیر استفاده کرده‌ایم.


newlist = [x for x in range(10)]
print(newlist)

خروجی:

.

مثال بالا را با یک شرط در زیر بازنویسی کرده‌ایم.


newlist = [x for x in range(10) if x < 5]
print(newlist)

خروجی:

.

عبارت

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

برای مثال در کد زیر مقادیر را در لیست جدید به حروف بزرگ تبدیل می‌کنیم.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x.upper() for x in fruits]
print(newlist)

خروجی:

.

می‌توانید خروجی را به هر چیزی که دوست داشته باشید تغییر دهید. برای نمونه در کد زیر همه مقادیر را در لیست جدید برابر "hello" قرار داده‌ایم.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = ['hello' for x in fruits]
print(newlist)

خروجی:

عبارت (the expression) می‌تواند شامل شروط هم باشد. البته نه به مانند یک فیلتر بلکه به عنوان راهی برای دستکاری خروجی.


fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x if x != "banana" else "orange" for x in fruits]
print(newlist)

خروجی:

عبارت، در مثال بالا می‌گوید که: همه عناصری که banana نیستند را برگردان ولی اگر banana بود، مقدار orange را برگردان.