🍰 تقطيع القوائم في بايثون: كيف تستخرج أي جزء تريده بسهولة! ✂️

تخيل أن لديك قائمة طويلة من العناصر، مثل قائمة بأسماء الطلاب أو أسعار المنتجات. ماذا لو أردت الحصول على جزء معين منها فقط، مثل أول 3 عناصر أو العناصر من المركز الثاني إلى الخامس؟ هنا يأتي دور تقطيع القوائم (List Slicing)، وهي أداة سحرية في بايثون تتيح لك فعل ذلك بكل سهولة! 🪄


📌 ما هو تقطيع القوائم (List Slicing)؟

تقطيع القوائم هو عملية استخراج جزء محدد من قائمة موجودة لإنشاء قائمة جديدة، دون تعديل القائمة الأصلية. تشبه عملية تقطيع كعكة 🍰 كبيرة إلى شرائح أصغر. كل شريحة هي جزء من الكعكة الأصلية.

في بايثون، نستخدم الأقواس المربعة [] مع النقطتين : لفعل ذلك. الصيغة الأساسية هي: القائمة[بداية:نهاية]

# مثال: لدينا قائمة بأسماء أيام الأسبوع
week_days = ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

# نريد استخراج أيام العمل (من الإثنين إلى الخميس)
work_days = week_days[2:6]  # تبدأ من الفهرس 2 (Monday) وتنتهي قبل الفهرس 6 (Friday)

print(work_days)  # ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
print(week_days)  # القائمة الأصلية لم تتغير ['Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

🔢 فهم المؤشرات (Index) في التقطيع

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

لنتأمل القائمة التالية:

my_list = ['A', 'B', 'C', 'D', 'E', 'F']
# Index:       0    1    2    3    4    5
  • my_list[1:4] ستعيد ['B', 'C', 'D']
    • البداية: الفهرس 1 (العنصر 'B') → مُضمن
    • النهاية: الفهرس 4 (العنصر 'E') → غير مُضمن ❌ (التقطيع يتوقف عند الفهرس 3)

🎯 حالات التقطيع الشائعة مع أمثلة

1. تقطيع من البداية إلى نهاية محددة

احذف فهرس البداية لتبدأ من العنصر الأول (فهرس 0).

colors = ["Red", "Green", "Blue", "Yellow", "Purple"]

first_three = colors[:3]  # مثل colors[0:3]
print(first_three)  # ['Red', 'Green', 'Blue']

2. تقطيع من مكان محدد إلى النهاية

احذف فهرس النهاية لتنتهي عند آخر عنصر في القائمة.

colors = ["Red", "Green", "Blue", "Yellow", "Purple"]

from_blue = colors[2:]  # من الفهرس 2 (Blue) إلى النهاية
print(from_blue)  # ['Blue', 'Yellow', 'Purple']

3. تقطيع القائمة كاملة (إنشاء نسخة)

استخدم النقطتين فقط [:] لإنشاء نسخة كاملة جديدة من القائمة.

original = [10, 20, 30]
copy_list = original[:]  # نسخة جديدة مستقلة

copy_list[0] = 99
print("Original:", original)  # [10, 20, 30]
print("Copy:", copy_list)  # [99, 20, 30]

4. استخدام المؤشرات السالبة

المؤشرات السالبة تبدأ العد من نهاية القائمة (-1 هو آخر عنصر).

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

# الحصول على آخر 3 عناصر
last_three = numbers[-3:]
print(last_three)  # [7, 8, 9]

# استبعاد أول عنصرين وآخر عنصرين
middle = numbers[2:-2]
print(middle)  # [2, 3, 4, 5, 6, 7]

🚀 التقطيع بخطوة (Step) - السحر الحقيقي! ✨

يمكننا إضافة معامل ثالث يسمى الخطوة (Step)، والذي يحدد الفجوة بين عناصر القائمة المقطوعة. الصيغة تصبح: القائمة[بداية:نهاية:خطوة]

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

# أخذ عنصر، وتخطي الذي يليه (خطوة = 2)
even_indices = numbers[::2]
print(even_indices)  # [0, 2, 4, 6, 8]

# البدء من الفهرس 1، ثم أخذ كل عنصر ثاني
odd_indices = numbers[1::2]
print(odd_indices)  # [1, 3, 5, 7, 9]

# عكس ترتيب القائمة كاملة باستخدام خطوة سالبة
reversed_list = numbers[::-1]
print(reversed_list)  # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

💡 ملخص سريع وأخطاء شائعة

  • الصيغة الكاملة: list[start:stop:step]
  • القاعدة: start مُضمن، stop غير مُضمن.
  • القيم الافتراضية: إذا حذفت start تصبح 0، إذا حذفت stop تصبح نهاية القائمة، إذا حذفت step تصبح 1.
  • خطأ شائع: my_list[2:5] تعيد 3 عناصر (الفهارس 2, 3, 4) وليس 4 عناصر.

🧪 تدريب سريع

جرب بنفسك! ماذا سيكون ناتج الكود التالي؟

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
result = letters[1:6:2]
print(result)

الحل: ['b', 'd', 'f']

  • البداية: الفهرس 1 ('b')
  • النهاية: الفهرس 6 ('g') → غير مُضمن
  • الخطوة: 2 → نأخذ 'b'، ثم نتخطى 'c' ونأخذ 'd'، ثم نتخطى 'e' ونأخذ 'f'، ثم نتوقف قبل 'g'.