Python - List Comprehension
List Comprehension
List Comprehension یک نوشتار کوتاهتر را برای ایجاد یک لیست جدید بر اساس مقادیر یک لیست موجود ارائه میکند.
برای درک بهتر، مسئله را با یک مثال توضیح میدهیم. فرض کنید که بر اساس یک لیست که شامل اسامی میوه است، میخواهید یک لیست جدید ایجاد کنید که تنها شامل میوههایی باشد که دارای حرف "a" باشند. بدون استفاده از List Comprehension باید یک دستور for
که داخل آن یک تست کننده شرایط است، بنویسید.
با استفاده از List Comprehension میتوانید همه این کارها را در یک خط انجام دهید.
نوشتار
newlist = [expression for item in iterable if condition == True]
مقدار برگردانده شده یک لیست جدید است و لیست قدیمی بدون تغییر خواهد ماند.
شرایط
شرط (condition) یا شرایط به مانند یک فیلتری است که تنها مقادیری را که True
باشند، قبول میکند. برای مثال کد زیر تنها آیتمهایی را قبول میکند که مقدار آنها برابر "apple" نباشد.
شرط if x != "apple"
برای همه عناصر به غیر از "apple" مقدار True
را برمیگرداند. در نتیجه خروجی یک لیست جدید شامل همه میوهها به جز "apple" خواهد بود.
داشتن شرط اختیاری است و میتوان آن را ننوشت.
تکرارپذیر
تکرارپذیر (iterable) میتواند از هر نوعی باشد؛ لیست، تاپل و ...
در مثال زیر از تابع range()
برای ایجاد یک تکرارپذیر استفاده کردهایم.
مثال بالا را با یک شرط در زیر بازنویسی کردهایم.
عبارت
عبارت (expression) آیتم جاری در تکرار است، اما خروجی هم هست که شما میتوانید قبل از اینکه به عنوان یک آیتم در لیست جدید قرار گیرد آن را تغییر دهید.
برای مثال در کد زیر مقادیر را در لیست جدید به حروف بزرگ تبدیل میکنیم.
میتوانید خروجی را به هر چیزی که دوست داشته باشید تغییر دهید. برای نمونه در کد زیر همه مقادیر را در لیست جدید برابر "hello" قرار دادهایم.
عبارت (the expression) میتواند شامل شروط هم باشد. البته نه به مانند یک فیلتر بلکه به عنوان راهی برای دستکاری خروجی.
عبارت، در مثال بالا میگوید که: همه عناصری که banana نیستند را برگردان ولی اگر banana بود، مقدار orange را برگردان.