Python - List Comprehension

در پایتون، List Comprehension یک روش مختصر، سریع و پایتونیک برای ایجاد لیست جدید با استفاده از حلقه‌ها و شرط‌ها است.
این روش جایگزین طولانی استفاده از حلقه‌های for و ()append می‌شود.

🔹 1️⃣ ساختار پایه

new_list = [expression for item in iterable if condition]
  • expression → مقداری که می‌خواهید در لیست جدید باشد.

  • item → متغیر که از iterable می‌گیرد.

  • iterable → هر چیزی که قابل تکرار باشد (لیست، رشته، tuple و …).

  • condition (اختیاری) → اگر شرط برقرار باشد، عنصر اضافه می‌شود.

🔹 2️⃣ مثال‌های ساده

مثال 1: مربع اعداد

squares = [x**2 for x in range(5)] print(squares) # [0, 1, 4, 9, 16]

مثال 2: انتخاب اعداد زوج

even_numbers = [x for x in range(10) if x % 2 == 0] print(even_numbers) # [0, 2, 4, 6, 8]

مثال 3: تبدیل حروف به بزرگ

fruits = ["apple", "banana", "cherry"] upper_fruits = [f.upper() for f in fruits] print(upper_fruits) # ['APPLE', 'BANANA', 'CHERRY']

🔹 3️⃣ لیست از رشته

letters = [letter for letter in "Python"] print(letters) # ['P', 'y', 't', 'h', 'o', 'n']

🔹 4️⃣ استفاده از شرط (if … else)

numbers = [1, 2, 3, 4, 5] labels = ["even" if x % 2 == 0 else "odd" for x in numbers] print(labels) # ['odd', 'even', 'odd', 'even', 'odd']

🔹 5️⃣ Nested List Comprehension

برای لیست‌های تو در تو یا ماتریس:

matrix = [[1, 2, 3], [4, 5, 6]] flattened = [num for row in matrix for num in row] print(flattened) # [1, 2, 3, 4, 5, 6]

🔹 6️⃣ شرط پیچیده

می‌توانید چند شرط استفاده کنید:

numbers = [1, 2, 3, 4, 5, 6] filtered = [x for x in numbers if x > 2 and x % 2 == 0] print(filtered) # [4, 6]

✅ نکات مهم

  • سریع‌تر و خواناتر از حلقه‌های معمولی است.

  • می‌تواند شامل چندین حلقه و شرط باشد.

  • برای ساخت لیست جدید استفاده می‌شود؛ لیست اصلی تغییر نمی‌کند مگر اینکه بازنویسی شود.

  • پیچیده کردن بیش از حد می‌تواند خوانایی را کاهش دهد؛ در آن صورت از حلقه‌ی معمولی استفاده کنید.

💡 خلاصه:
List Comprehension یک روش کوتاه، شفاف و پایتونیک برای ایجاد و فیلتر لیست‌هاست:

new_list = [expression for item in iterable if condition]

می‌توانید از آن برای تبدیل، فیلتر، و ترکیب عناصر استفاده کنید و کد خود را بسیار مختصر کنید.