تخطَّ إلى المحتوى

🐍 شرح Python

القوائم (Lists)

الدرس 10 من 29· ⏱ 4 دقائق قراءة· 🗓 آخر تحديث: ١٨ أكتوبر ٢٠٢٦

ما هي القائمة؟

القائمة list تحفظ عدّة قيم مرتّبة في متغيّر واحد، بين قوسين مربّعين:

fruits = ["تفاح", "موز", "برتقال"]
scores = [85, 90, 78]
mixed = ["سارة", 22, True]      # أنواع مختلفة: مسموح، لكنه نادر في الكود الحقيقي
empty = []
print(len(fruits), len(empty))  # 3 0

بدل score1 وscore2 وscore3، قائمة واحدة تكبر وتصغر كما تحتاج، وتمرّ عليها بحلقة (درس الحلقات).

الوصول والتقطيع

نفس قواعد النصوص: الفهرسة تبدأ من 0، والسالب يعدّ من النهاية، والتقطيع لا يشمل النهاية:

fruits = ["تفاح", "موز", "برتقال", "عنب", "مانجو"]
print(fruits[0])      # تفاح
print(fruits[-1])     # مانجو
print(fruits[1:3])    # ['موز', 'برتقال']
print(fruits[::-1])   # معكوسة
print("موز" in fruits)          # True
print(fruits.index("عنب"))      # 3

fruits[10] ترمي IndexError، وfruits.index("كيوي") ترمي ValueError إن لم يوجد العنصر. افحص بـ in أولًا.

القائمة قابلة للتعديل

على عكس النص، تعدّل القائمة في مكانها:

fruits = ["تفاح", "موز"]

fruits[0] = "كمثرى"            # استبدال عنصر
fruits.append("عنب")           # إضافة للنهاية
fruits.insert(1, "مانجو")      # إضافة في موضع
fruits.extend(["كيوي", "تين"]) # إضافة قائمة كاملة
print(fruits)

fruits.remove("موز")           # حذف أول ظهور بالقيمة
last = fruits.pop()            # حذف وإرجاع الأخير
first = fruits.pop(0)          # حذف وإرجاع من موضع
del fruits[0]                  # حذف بالموضع بلا إرجاع
print(fruits, last, first)
الدالةتفعلتعيد
append(x)تضيف x للنهايةNone
insert(i, x)تضيف في الموضع iNone
extend(list)تضيف كل عناصر قائمة أخرىNone
remove(x)تحذف أول xNone
pop(i)تحذف من الموضع (الأخير افتراضيًّا)العنصر المحذوف
sort()ترتّب في المكانNone
reverse()تعكس في المكانNone
count(x)عدد مرّات x
index(x)موضع أول x

لاحظ عمود "تعيد": دوال التعديل تعيد None. لهذا fruits = fruits.append("x") تمسح قائمتك وتضع مكانها None.

append مقابل extend:

a = [1, 2]
a.append([3, 4])
print(a)          # [1, 2, [3, 4]]: عنصر واحد هو قائمة
b = [1, 2]
b.extend([3, 4])
print(b)          # [1, 2, 3, 4]

الترتيب

scores = [72, 91, 85, 64]
scores.sort()                       # تعدّل القائمة نفسها
print(scores)                       # [64, 72, 85, 91]
scores.sort(reverse=True)
print(scores)                       # [91, 85, 72, 64]

names = ["ليلى", "أحمد", "سارة"]
ordered = sorted(names)             # تعيد قائمة جديدة، الأصل كما هو
print(ordered, names)

words = ["Python", "is", "fun"]
print(sorted(words, key=len))       # حسب الطول: ['is', 'fun', 'Python']

sort() تغيّر الأصل وتعيد None، وsorted() تعيد نسخة مرتّبة. وkey تحدّد على أي أساس يكون الترتيب، وهي غالبًا دالة أو lambda (درس lambda).

النسخ: اسمان أم قائمتان؟

a = [1, 2, 3]
b = a              # ⚠️ اسم ثانٍ لنفس القائمة
b.append(4)
print(a)           # [1, 2, 3, 4]: a تغيّرت أيضًا!

c = a.copy()       # أو a[:] أو list(a): قائمة جديدة
c.append(5)
print(a, c)        # [1, 2, 3, 4] [1, 2, 3, 4, 5]

الإسناد في بايثون لا ينسخ أبدًا: يجعل اسمًا آخر يشير لنفس الكائن (المتغيّر اسم يشير لقيمة). مع الأرقام والنصوص لا تلاحظ ذلك لأنها لا تتغيّر، لكن مع القوائم يظهر فورًا. والشيء نفسه يحدث حين تمرّر قائمة لدالة: الدالة تستطيع تعديلها.

قوائم داخل قوائم

matrix = [
    [1, 2, 3],
    [4, 5, 6],
]
print(matrix[1][2])         # 6: الصف الثاني، العمود الثالث
for row in matrix:
    print(sum(row))

⚠️ grid = [[0] * 3] * 3 تبدو كجدول 3×3، لكنها ثلاث إشارات لنفس الصف: تعديل grid[0][0] يغيّر الصفوف الثلاثة. استخدم [[0] * 3 for _ in range(3)].

دوال مفيدة مع القوائم

nums = [4, 8, 15, 16, 23, 42]
print(len(nums), sum(nums), min(nums), max(nums))
print(sum(nums) / len(nums))          # المعدّل
print(any(n > 40 for n in nums))      # هل يوجد واحد على الأقل؟ True
print(all(n > 0 for n in nums))       # هل كلها؟ True
evens = [n for n in nums if n % 2 == 0]
print(evens)                          # [4, 8, 16, 42]

السطر الأخير List Comprehension: بناء قائمة جديدة من أخرى بسطر واحد، وهو موضوع درس Comprehensions.

جرّب بنفسك

🐍 محرّر بايثون
📥 المدخلات (input) — قيمة في كل سطر
وحدة التحكّم
اضغط «تشغيل» لرؤية النتيجة هنا.

أخطاء شائعة

  • x = x.append(...) أو x = x.sort(): تصبح x قيمتها None.
  • b = a لنسخ قائمة: اسمان لقائمة واحدة. استخدم a.copy().
  • حذف عناصر أثناء المرور على نفس القائمة: تتخطّى عناصر. ابنِ قائمة جديدة.
  • [[0] * 3] * 3: صفوف مشتركة.
  • append لإضافة عدّة عناصر: تضيف القائمة كعنصر واحد. استخدم extend.
  • list.index(x) بلا فحص: ValueError إن لم يوجد.

🎯 التالي: الصفوف (Tuples): قوائم لا تتغيّر.

شرح القوائم (Lists) — Python بالعربي
القوائم (Lists) — Python بالعربي · The Code Fix

📚 لمزيد من التعمّق في Python، راجِع التوثيق الرسمي لـ Python.

هل كان هذا الدرس مفيدًا؟