درک لیست (List Comprehension)
درک لیست (List Comprehension) یعنی ساختن لیست جدید، سریع و تمیز. «تکرارپذیر (Iterable)» یعنی چیزی که می توان رویش حلقه زد. «شرط (Condition)» یعنی فیلتر ساده. این روش کد را کوتاه می کند و خوانایی را بالا می برد.
ایده ی اصلی با مثال میوه ها
می خواهیم فقط میوه های دارای حرف «a» را جدا کنیم. اول روش معمول با حلقه:
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
حالا همین کار با درک لیست، کوتاه و شسته رفته:
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)
ساختار (Syntax)
قالب کلی کار این است. «عبارت (Expression)» خروجی هر آیتم است.
# newlist = [expression for item in iterable if condition]
# خروجی: لیست جدید؛ لیست قبلی دست نخورده می ماند.
شرط (Condition) به عنوان فیلتر
شرط مانند صافی عمل می کند. اینجا «apple» حذف می شود.
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if x != "apple"]
print(newlist)
بدون شرط هم می توان نوشت. این نسخه فقط یک کپی می سازد.
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) و دستکاری خروجی
می توان خروجی را تغییر داد. اینجا همه را uppercase می کنیم.
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x.upper() for x in fruits]
print(newlist)
حتی می توان همه خروجی ها را مقدار ثابت داد.
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = ["hello" for x in fruits]
print(newlist)
شرط داخل «عبارت» هم ممکن است. این یک if/else کوتاه است.
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x if x != "banana" else "orange" for x in fruits]
print(newlist)
نکته های یادگیری
نکته: اگر تازه کاری، اول حلقه روی لیست را مرور کن. برای رجوع سریع به مفاهیم، درک لیست را بوکمارک کن.
نکته: خوانایی مهم است. اگر شرط ها پیچیده شدند، از حلقه معمول استفاده کن.
تمرین گام به گام
- یک لیست عددی بساز.
- فقط اعداد زوج را بردار.
- بعد مربع آن ها را خروجی بده.
nums = [1, 2, 3, 4, 5, 6]
evens_squared = [n * n for n in nums if n % 2 == 0]
print(evens_squared)
جمع بندی سریع
- درک لیست کوتاه و خوانا است.
- شرط یعنی فیلتر ساده.
- عبارت خروجی هر آیتم است.
- لیست قبلی تغییر نمی کند.
- زیاده روی نکن؛ خوانایی مهم است.
نکته: ادامه کار با مرتب سازی لیست بهتر می شود.