list comprehension

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/11
  • تعداد بازدید: 19

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

# محاسبه مکعب اعداد از ۰ تا ۴
cubes = [i ** 3 for i in range(5)]
print(cubes)

خروجی:

[0, 1, 8, 27, 64]

افزودن شرط: می‌توانید از عبارت if برای فیلتر کردن مقادیر داخل درک لیست استفاده کنید. مثال زیر فقط مقادیری را اضافه می‌کند که مربع‌شان زوج باشد:

evens = [i ** 2 for i in range(10) if i ** 2 % 2 == 0]
print(evens)

خروجی:

[0, 4, 16, 36, 64]

استفاده با if-else در درک لیست: می‌توانید از شرط if-else در خود عبارت نیز استفاده کنید. این کاربرد برای زمانی‌ست که بخواهید مقدار جایگزین مشخصی در صورت برقرار نبودن شرط برگردانید.

labels = ["even" if i % 2 == 0 else "odd" for i in range(5)]
print(labels)

خروجی:

['even', 'odd', 'even', 'odd', 'even']

نکته مهم: اگر اندازه خروجی بسیار بزرگ باشد، مانند استفاده از range(10**100)، حافظه سیستم شما پر شده و با خطای MemoryError مواجه خواهید شد.

# هشدار: اجرای این خط باعث MemoryError خواهد شد
even = [2 * i for i in range(10**100)]

راه‌حل: استفاده از Generator Expression به جای List Comprehension زمانی‌ که نیاز به مصرف پایین حافظه دارید:

even_gen = (2 * i for i in range(10**100))
print(next(even_gen))
print(next(even_gen))

پیشرفت‌ها در نسخه‌های جدید پایتون:

  • در پایتون 3.8 به بعد، List Comprehension می‌تواند در کنار := (Walrus Operator) برای انتساب درون‌خطی استفاده شود.
result = [y for x in range(10) if (y := x**2) > 10]
print(result)

خروجی:

[16, 25, 36, 49, 64, 81]

کاربردهای رایج List Comprehension:

# حذف فاصله‌های اضافی از رشته‌ها
cleaned = [s.strip() for s in ["  apple ", " banana  ", "  cherry"]]

# فیلتر کردن لیست اسامی با شرط طول
names = [name for name in ["Ali", "Sara", "Mohammad", "Zahra"] if len(name) > 4]

# ساختن جدول ضرب
table = [f"{i}×{j}={i*j}" for i in range(1, 4) for j in range(1, 4)]

درک لیست‌ها ترکیبی از سادگی و قدرت را به پایتون داده‌اند و در بسیاری از اسکریپت‌های واقعی به چشم می‌خورند. اگر عملکرد یا حافظه برایتان مهم است، Generator Expression جایگزین مناسبی‌ست.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.