Python: أساسيات القوائم

آخر تحديث: 2026-09-22

في الدروس السابقة، المتغيرات كانت تحمل قيمة واحدة فقط. لكن في الحياة الواقعية، نادراً ما تأتي البيانات كأفراد — عربات التسوق بها عناصر متعددة، لوحات الصدارة بها إدخالات متعددة، المقالات بها فقرات متعددة. القوائم مصممة لتحمل "مجموعة من البيانات." إنها هيكل البيانات الأكثر مرونة واستخداماً في بايثون.


دوال مدمجة ذات صلة:sorted() append() extend() insert() remove() index() clear() sort() len() max() min() sum() pop() list exit

1. ما هي القائمة

تُعرّف القائمة بأقواس مربعة []، عناصرها مفصولة بفواصل. يمكن أن تحمل عناصر من أنواع مختلفة:

PYTHON
# قائمة من الأعداد trueة
numbers = [1, 2, 3, 4, 5]

# قائمة من السلاسل النصية
fruits = ["apple", "banana", "orange"]

# أنواع مختلطة
mixed = [1, "hello", True, 3.14]

# قائمة فارغة
empty = []

print(numbers)   # [1, 2, 3, 4, 5]
print(fruits)    # ['apple', 'banana', 'orange']
print(empty)     # []
💡 القوائم مرتبة — العناصر تحافظ على الترتيب الذي أضفتها به، مع مواضع ثابتة. على عكس المجموعات، عناصر القائمة يمكن أن تتكرر.



2. الوصول بالفهرس

فهرسة القوائم تعمل تماماً مثل السلاسل النصية — تبدأ من 0، وتدعم الفهارس السالبة:

PYTHON
fruits = ["apple", "banana", "orange", "grape", "watermelon"]

# موجب: يبدأ من 0
print(fruits[0])      # apple
print(fruits[2])      # orange
print(fruits[4])      # watermelon

# سالب: يبدأ من -1 (آخر عنصر)
print(fruits[-1])     # watermelon
print(fruits[-2])     # grape
print(fruits[-5])     # apple

الوصول إلى فهرس خارج النطاق يُسبب خطأ:

PYTHON
# print(fruits[10])   # IndexError: list index out of range

▶ مثال: الحصول على معلومات عناصر القائمة (الصعوبة ⭐)

▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
# Executed successfully


3. عمليات CRUD للقوائم

القوائم قابلة للتعديل — يمكنك تعديلها في المكان (على عكس السلاسل النصية).

(1) إضافة عناصر

PYTHON
# append() — أضف إلى النهاية
cities = ["Beijing", "Shanghai"]
cities.append("Guangzhou")
print(cities)               # ['Beijing', 'Shanghai', 'Guangzhou']

# insert() — أدخل في موضع محدد
cities.insert(1, "Shenzhen")
print(cities)               # ['Beijing', 'Shenzhen', 'Shanghai', 'Guangzhou']

# extend() — ادمج قائمة أخرى
more_cities = ["Hangzhou", "Chengdu"]
cities.extend(more_cities)
print(cities)               # ['Beijing', 'Shenzhen', 'Shanghai', 'Guangzhou', 'Hangzhou', 'Chengdu']

(2) إزالة عناصر

PYTHON
# pop() — أزل وأرجع العنصر في موضع (افتراضي آخر عنصر)
cities = ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
last = cities.pop()         # أزل وأرجع الأخير
print(f"Removed: {last}")   # Shenzhen
print(cities)               # ['Beijing', 'Shanghai', 'Guangzhou']

first = cities.pop(0)       # أزل الأول
print(f"Removed: {first}")  # Beijing
print(cities)               # ['Shanghai', 'Guangzhou']

# remove() — أزل أول قيمة تطابق
cities = ["Beijing", "Shanghai", "Guangzhou", "Shanghai"]
cities.remove("Shanghai")   # يزيل فقط أول "Shanghai"
print(cities)               # ['Beijing', 'Guangzhou', 'Shanghai']

# clear() — أزل جميع العناصر
cities.clear()
print(cities)               # []

(3) تعديل عناصر

PYTHON
scores = [60, 70, 80, 90]
scores[2] = 85              # غيّر الثالث إلى 85
print(scores)               # [60, 70, 85, 90]

(4) البحث عن عناصر

PYTHON
# in — تحقق مما إذا كان العنصر موجوداً
fruits = ["apple", "banana", "orange"]
print("apple" in fruits)    # True
print("grape" in fruits)    # False

# index() — ابحث عن الموضع
print(fruits.index("banana")) # 1
# print(fruits.index("grape"))  # ValueError!
⚠️ ملاحظة: استخدام index() على عنصر غير موجود يُثير خطأ. استخدم in أولاً للتحقق بأمان.

▶ مثال: إدارة عربة التسوق (الصعوبة ⭐⭐)

▶ جرّب الكود

المخرجات:

TEXT 📖 للعرض فقط
Cart: ['apple', 'milk', 'bread', 'apple']
Total items: 4
After update: ['apple (2-pack)', 'milk', 'bread', 'apple']
Removed: apple
Final cart: ['apple (2-pack)', 'milk', 'bread']


4. الترتيب والعكس

PYTHON
numbers = [3, 1, 4, 1, 5, 9, 2]

# sort() — ترتيب في المكان (يعدل القائمة الأصلية)
numbers.sort()
print(numbers)              # [1, 1, 2, 3, 4, 5, 9]

# sort(reverse=True) — تنازلي
numbers.sort(reverse=True)
print(numbers)              # [9, 5, 4, 3, 2, 1, 1]

# reverse() — عكس الترتيب
numbers.reverse()
print(numbers)              # [1, 1, 2, 3, 4, 5, 9]

# sorted() — يُرجع قائمة جديدة، لا يعدل الأصلية
numbers = [3, 1, 4, 1, 5]
sorted_nums = sorted(numbers)
print(sorted_nums)          # [1, 1, 3, 4, 5]
print(numbers)              # [3, 1, 4, 1, 5] (لم تتغير)
💡 sort() مقابل sorted()؟ إذا كنت لا تحتاج الترتيب الأصلي، استخدم sort() (أسرع، أكثر كفاءة في الذاكرة). إذا كنت بحاجة للحفاظ على الترتيب الأصلي، استخدم sorted().



5. تقطيع القوائم

التقطيع يعمل بنفس طريقة السلاسل النصية: list[start:end:step]

PYTHON
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nums[2:6])            # [2, 3, 4, 5]
print(nums[:4])             # [0, 1, 2, 3] — أول 4
print(nums[6:])             # [6, 7, 8, 9] — من 6 إلى النهاية
print(nums[::2])            # [0, 2, 4, 6, 8] — كل عنصر آخر
print(nums[::-1])           # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] — معكوس

التقطيع يدعم أيضاً الإسناد — ميزة فريدة للقوائم:

PYTHON
nums = [0, 1, 2, 3, 4, 5]

# استبدال شريحة
nums[1:4] = [10, 20, 30]
print(nums)                 # [0, 10, 20, 30, 4, 5]

# حذف شريحة
nums[1:4] = []
print(nums)                 # [0, 4, 5]

▶ مثال: الترقيم الصفحي بالتقطيع (الصعوبة ⭐⭐)

▶ جرّب الكود

المخرجات:

TEXT 📖 للعرض فقط
Page 1: ['Item A', 'Item B', 'Item C']
Page 2: ['Item D', 'Item E', 'Item F']
Page 3: ['Item G']


6. القوائم المتداخلة

عناصر القائمة يمكن أن تكون هي نفسها قوائم — وهذا يُسمى قائمة متداخلة (أو قائمة ثنائية الأبعاد).

PYTHON
# "مصفوفة" 3×4
matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]

# الوصول: أولاً الصف، ثم العمود
print(matrix[0])        # [1, 2, 3, 4] — الصف الأول
print(matrix[1][2])     # 7 — الصف الثاني، العمود الثالث
print(matrix[2][0])     # 9 — الصف الثالث، العمود الأول

▶ مثال: جدول درجات الطلاب (الصعوبة ⭐⭐⭐)

▶ جرّب الكود

المخرجات:

TEXT 📖 للعرض فقط
Alice: Average 85.0
Bob: Average 91.0
Charlie: Average 81.0
Math scores:
  Alice: 85
  Bob: 90
  Charlie: 76


7. حالات الاستخدام الشائعة



دوال مدمجة ذات صلة:sorted() append() extend() insert() remove() index() clear() sort() len() max() min() sum() pop() list exit

❓ أسئلة شائعة

س ما الفرق بين القوائم والسلاسل النصية؟
ج الفرق الرئيسي هو أن القوائم قابلة للتعديل (يمكن تعديلها)، بينما السلاسل النصية غير قابلة للتعديل (لا يمكن تغيير الأصلية). القوائم يمكن أن تحمل أنواع بيانات مختلفة؛ السلاسل النصية يمكن أن تحمل فقط أحرفاً. أوجه التشابه: كلاهما يدعم الفهرسة والتقطيع و len() و in.
س ما الفرق بين append() و extend()؟
ج append() تضيف الوسيطة بأكملها كعنصر واحد — إذا مررت قائمة، تصبح قائمة متداخلة. extend() تضيف كل عنصر من الوسيطة بشكل فردي. a = [1,2]; a.append([3,4]) يعطي [1,2,[3,4]]، بينما a.extend([3,4]) يعطي [1,2,3,4].
س ماذا يحدث إذا حاولت remove() عنصراً غير موجود؟
ج يُثير ValueError. لذا تحقق باستخدام in أولاً: if "xxx" in my_list: my_list.remove("xxx"). أو استخدم قائمة شاملة لإنشاء قائمة جديدة مفلترة: new_list = [x for x in my_list if x != "xxx"] (سنتعلم هذا في الدرس التالي).

📖 ملخص


📝 تمارين

  1. أساسي (الصعوبة ⭐): أنشئ قائمة من 5 أفلام تحبها. استخدم append() لإضافة فيلم جديد، pop() لإزالة الأخير، sort() أبجدياً، ثم أخرج طول القائمة.

  2. متوسط (الصعوبة ⭐⭐): بالنظر إلى numbers = [23, 45, 12, 67, 34, 89, 5, 18]، ابحث وأخرج القيمة القصوى، الدنيا، المجموع، والمتوسط. تلميح: استخدم الدوال المدمجة مثل max()، min()، sum()، len().

  3. تحدي (الصعوبة ⭐⭐⭐): اكتب "مدير قائمة المهام." استخدم قائمة لتخزين المهام. ادعم: add:Buy milk، done:2 (أزل بالرقم)، list (أظهر الكل). استخدم while True لاستقبال الأوامر باستمرار؛ exit للخروج. تلميح: استخدم split(":") لتحليل الأوامر.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%