🐍 کتابخانه مرجع پایتون

🧮 کامپرهنشن‌ها (Comprehensions) در پایتون

کامپرهنشن‌ها یک روش خلاصه و خوانا برای ایجاد ساختارهای داده مانند لیست‌ها، دیکشنری‌ها و مجموعه‌ها هستند. این روش به شما اجازه می‌دهد با یک خط کد، حلقه‌های پیچیده را به شکل ساده‌تری بنویسید.

🔹 لیست کامپرهنشن (List Comprehension)

# روش معمول
squares = []
for i in range(5):
    squares.append(i ** 2)
print(squares)

# روش کامپرهنشن
squares_comp = [i ** 2 for i in range(5)]
print(squares_comp)
⏳ برای اجرا دکمه را بزنید...

🔹 لیست کامپرهنشن با شرط

# اعداد زوج ۰ تا ۲۰
evens = [i for i in range(21) if i % 2 == 0]
print(evens)

# اعداد فرد از ۰ تا ۲۰
odds = [i for i in range(21) if i % 2 != 0]
print(odds)
⏳ برای اجرا دکمه را بزنید...

🔹 کامپرهنشن با شرط و else

# جایگزینی اعداد با 'even' یا 'odd'
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
result = ["even" if n % 2 == 0 else "odd" for n in numbers]
print(result)
⏳ برای اجرا دکمه را بزنید...

🔹 کامپرهنشن تو در تو (Nested)

# ترکیب دو لیست
colors = ["red", "green", "blue"]
sizes = ["S", "M", "L"]
combinations = [(color, size) for color in colors for size in sizes]
print(combinations)

# ماتریس ۳x۳ با کامپرهنشن
matrix = [[j for j in range(3)] for i in range(3)]
print(matrix)
⏳ برای اجرا دکمه را بزنید...

🔹 دیکشنری کامپرهنشن (Dictionary Comprehension)

# مربع اعداد
squares = {x: x**2 for x in range(5)}
print(squares)

# فیلتر کردن
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)

# تبدیل لیست به دیکشنری
names = ["Saba", "Ali", "Reza"]
name_length = {name: len(name) for name in names}
print(name_length)
⏳ برای اجرا دکمه را بزنید...

🔹 مجموعه کامپرهنشن (Set Comprehension)

# مربع اعداد
squares = {x**2 for x in range(5)}
print(squares)

# فیلتر کردن
even_squares = {x**2 for x in range(10) if x % 2 == 0}
print(even_squares)

# طول رشته‌ها
names = ["apple", "banana", "cherry", "date"]
lengths = {len(name) for name in names}
print(lengths)
⏳ برای اجرا دکمه را بزنید...

🔹 کامپرهنشن با توابع

# استفاده از تابع در کامپرهنشن
def square(n):
    return n ** 2

numbers = [1, 2, 3, 4, 5]
squared = [square(n) for n in numbers]
print(squared)

# استفاده از تابع داخلی
names = ["saba", "ali", "reza"]
capitalized = [name.capitalize() for name in names]
print(capitalized)
⏳ برای اجرا دکمه را بزنید...

🔹 کامپرهنشن با enumerate

# ایجاد لیست از اندیس‌ها و مقادیر
fruits = ["apple", "banana", "cherry"]
indexed = [(index, fruit) for index, fruit in enumerate(fruits)]
print(indexed)

# فقط اندیس‌های زوج
even_indexed = [(i, fruit) for i, fruit in enumerate(fruits) if i % 2 == 0]
print(even_indexed)
⏳ برای اجرا دکمه را بزنید...

🔹 کامپرهنشن با zip

names = ["Saba", "Ali", "Reza"]
ages = [25, 30, 22]
cities = ["Tehran", "Shiraz", "Isfahan"]

# ترکیب سه لیست
people = [(name, age, city) for name, age, city in zip(names, ages, cities)]
print(people)

# دیکشنری از دو لیست
name_age = {name: age for name, age in zip(names, ages)}
print(name_age)
⏳ برای اجرا دکمه را بزنید...

🔹 کامپرهنشن پیشرفته

# حذف تکراری‌ها با کامپرهنشن
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
unique = []
[unique.append(n) for n in numbers if n not in unique]
print(unique)

# تبدیل رشته به لیست کاراکترها
text = "Python"
chars = [char for char in text]
print(chars)

# کامپرهنشن با شرط و else
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
result = ["even" if n % 2 == 0 else "odd" for n in numbers]
print(result)
⏳ برای اجرا دکمه را بزنید...

🔹 مقایسه کامپرهنشن با حلقه معمولی

import time

# ایجاد یک لیست با حلقه معمولی
start = time.time()
squares_loop = []
for i in range(1000000):
    squares_loop.append(i ** 2)
loop_time = time.time() - start

# ایجاد یک لیست با کامپرهنشن
start = time.time()
squares_comp = [i ** 2 for i in range(1000000)]
comp_time = time.time() - start

print(f"Loop time: {loop_time:.4f} seconds")
print(f"Comprehension time: {comp_time:.4f} seconds")
print(f"Comprehension is {loop_time / comp_time:.2f}x faster!")
⏳ برای اجرا دکمه را بزنید...

🔹 مثال جامع: تحلیل داده با کامپرهنشن

# داده نمونه: لیست دانشجویان با نمرات
students = [
    {"name": "Saba", "grades": [18, 19, 17, 20]},
    {"name": "Ali", "grades": [15, 16, 14, 13]},
    {"name": "Reza", "grades": [20, 19, 18, 17]},
    {"name": "Mina", "grades": [12, 14, 13, 15]}
]

# میانگین نمرات هر دانشجو
averages = [
    {"name": s["name"], "average": sum(s["grades"]) / len(s["grades"])}
    for s in students
]
print("Averages:")
for student in averages:
    print(f"{student['name']}: {student['average']:.2f}")

# دانشجویانی که میانگین بالای ۱۷ دارند
top_students = [
    s["name"] for s in averages if s["average"] >= 17
]
print(f"\nTop students: {top_students}")

# لیست نمرات همه دانشجویان
all_grades = [grade for s in students for grade in s["grades"]]
print(f"\nAll grades: {all_grades}")

# میانگین کل نمرات
total_average = sum(all_grades) / len(all_grades)
print(f"Total average: {total_average:.2f}")

# دیکشنری از نام و میانگین
name_avg = {s["name"]: sum(s["grades"]) / len(s["grades"]) for s in students}
print(f"\nName-Average dictionary: {name_avg}")
⏳ برای اجرا دکمه را بزنید...

📌 نکات کلیدی

← قبلی: کلاس‌ها (OOP) → بعدی: توابع لامبدا ↑ بازگشت به فهرست مقدماتی