التكرار على القوائم في بايثون

القوائم تصبح أقوى بكثير عندما نتعلم كيف نمر على عناصرها ونعالجها واحداً تلو الآخر. التكرار على القوائم هو أحد أكثر العمليات شيوعاً في البرمجة، ويستخدم في كل شيء من معالجة البيانات إلى بناء واجهات المستخدم.

في هذا الدرس، ستتعلم جميع طرق التكرار على القوائم في بايثون: من الطريقة البسيطة إلى التقنيات المتقدمة مثل enumerate و zip و List Comprehension.

1. التكرار البسيط باستخدام for

أبسط طريقة للمرور على عناصر القائمة هي استخدام حلقة for. في كل دورة، يتم تعيين العنصر الحالي لمتغير الحلقة.

simple_iteration.py
fruits = ["Apple", "Banana", "Cherry", "Date"]

print("=== التكرار البسيط ===")
for fruit in fruits:
    print(f"  - {fruit}")

# مثال مع معالجة
print("\n=== مع معالجة ===")
numbers = [1, 2, 3, 4, 5]
total = 0

for num in numbers:
    total += num
    print(f"أضفت {num}, المجموع الآن: {total}")

print(f"\nالمجموع النهائي: {total}")
النتيجة
=== التكرار البسيط === - Apple - Banana - Cherry - Date === مع معالجة === أضفت 1, المجموع الآن: 1 أضفت 2, المجموع الآن: 3 أضفت 3, المجموع الآن: 6 أضفت 4, المجموع الآن: 10 أضفت 5, المجموع الآن: 15 المجموع النهائي: 15

2. التكرار مع الفهرس باستخدام enumerate

أحياناً تحتاج لمعرفة موضع العنصر (فهرسه) أثناء التكرار. الدالة enumerate() توفر الفهرس والقيمة معاً.

enumerate_example.py
students = ["أحمد", "سارة", "محمد", "فاطمة"]

print("=== قائمة الطلاب (تبدأ من 0) ===")
for index, student in enumerate(students):
    print(f"  [{index}] {student}")

print("\n=== قائمة الطلاب (تبدأ من 1) ===")
for index, student in enumerate(students, start=1):
    print(f"  {index}. {student}")

# استخدام عملي: البحث عن موضع عنصر
print("\n=== البحث عن 'محمد' ===")
for i, name in enumerate(students):
    if name == "محمد":
        print(f"تم العثور على 'محمد' في الموضع {i}")
النتيجة
=== قائمة الطلاب (تبدأ من 0) === [0] أحمد [1] سارة [2] محمد [3] فاطمة === قائمة الطلاب (تبدأ من 1) === 1. أحمد 2. سارة 3. محمد 4. فاطمة === البحث عن 'محمد' === تم العثور على 'محمد' في الموضع 2

3. التكرار على قائمتين معاً باستخدام zip

الدالة zip() تسمح بالتكرار على قائمتين أو أكثر في نفس الوقت، بحيث تحصل على عنصر من كل قائمة في كل دورة.

zip_example.py
names = ["أحمد", "سارة", "محمد"]
ages = [25, 30, 28]
cities = ["القاهرة", "الرياض", "دبي"]

print("=== بيانات الأشخاص ===")
for name, age, city in zip(names, ages, cities):
    print(f"  {name} ({age} سنة) - {city}")

# استخدام عملي: إنشاء قاموس من قائمتين
print("\n=== إنشاء قاموس ===")
keys = ["name", "age", "city"]
values = ["أحمد", 25, "القاهرة"]

person = dict(zip(keys, values))
print(f"  {person}")
النتيجة
=== بيانات الأشخاص === أحمد (25 سنة) - القاهرة سارة (30 سنة) - الرياض محمد (28 سنة) - دبي === إنشاء قاموس === {'name': 'أحمد', 'age': 25, 'city': 'القاهرة'}

4. List Comprehension

List Comprehension هي طريقة أنيقة ومختصرة لإنشاء قوائم جديدة من قوائم موجودة. تجمع بين التكرار والشرط في سطر واحد.

list_comprehension.py
# الطريقة التقليدية
squares_traditional = []
for x in range(1, 6):
    squares_traditional.append(x ** 2)

# باستخدام List Comprehension
squares = [x ** 2 for x in range(1, 6)]

print(f"المربعات: {squares}")

# مع شرط (فلترة)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [n for n in numbers if n % 2 == 0]
print(f"الزوجية فقط: {evens}")

# مع تحويل وشرط
words = ["hello", "world", "python", "is", "awesome"]
long_upper = [w.upper() for w in words if len(w) > 4]
print(f"الكلمات الطويلة بالحروف الكبيرة: {long_upper}")
النتيجة
المربعات: [1, 4, 9, 16, 25] الزوجية فقط: [2, 4, 6, 8, 10] الكلمات الطويلة بالحروف الكبيرة: ['HELLO', 'WORLD', 'PYTHON', 'AWESOME']

5. تطبيق عملي: تحليل البيانات

data_analysis.py
grades = [85, 92, 78, 95, 88, 76, 90, 82, 97, 73]

print("=== تحليل درجات الطلاب ===")
print(f"الدرجات: {grades}")
print("-" * 40)

# الإحصائيات
print(f"عدد الطلاب: {len(grades)}")
print(f"المجموع: {sum(grades)}")
print(f"المتوسط: {sum(grades) / len(grades):.2f}")
print(f"الأعلى: {max(grades)}")
print(f"الأدنى: {min(grades)}")

# الطلاب الناجحين (60 فأعلى)
passing = [g for g in grades if g >= 60]
print(f"\nالناجحون: {len(passing)} من {len(grades)}")

# الطلاب المتفوقين (90 فأعلى)
excellent = [g for g in grades if g >= 90]
print(f"المتفوقون: {len(excellent)}")

6. أفضل الممارسات

افعل
  • استخدم enumerate بدلاً من range(len())
  • استخدم zip لتكرار متوازي
  • استخدم List Comprehension للتحويلات البسيطة
  • اختر أسماء معبرة لمتغيرات الحلقة
لا تفعل
  • لا تعدل القائمة أثناء التكرار عليها
  • لا تفرط في تعقيد List Comprehension
  • لا تستخدم range(len(list)) بشكل عام
  • لا تنس أن zip تتوقف عند أقصر قائمة
ملخص الدرس
  • for item in list للتكرار البسيط
  • enumerate() للحصول على الفهرس والقيمة
  • zip() للتكرار على عدة قوائم معاً
  • List Comprehension لإنشاء قوائم بشكل مختصر

الخطوة التالية

تعلم الصفوف (Tuples) - قوائم غير قابلة للتعديل

الدرس التالي: الصفوف (Tuples)
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن