تقسيم السلاسل النصية (Slicing)
استخرج الأجزاء الفرعية بإحكام من السلاسل باستخدام بناء جملة الشريحة.
- استخراج الأجزاء الفرعية باستخدام s[start:end]
- استخدام الخطوات السالبة والمؤشرات السالبة للوصول العكسي
- فهم أنّ التقسيم حصري من الأعلى ولكنه شامل من الأسفل
- استخدام s[::-1] لعكس السلسلة
لغةُ النوافذ
السلسلةُ تسلسلٌ، وشخصياتُها تقف في مراكزَ . والشريحةُ طلبُ النافذة بين حدّين. العلامةُ string[start:stop:step] ، والاختلالُ الوحيدُ الذي يجب حفظُه أن start مشمولٌ وstop مستبعدٌ، القاعدةُ شبهُ المفتوحةِ التي علّمك إياها range:
text = "Python"
text[0:3] # 'Pyt'
text[2:5] # 'tho'
text[:4] # 'Pyth' (البداية الافتراضية 0)
text[3:] # 'hon' (النهاية الافتراضية آخر السلسلة)
text[:] # 'Python' (نسخة كاملة)إغفالُ حدٍّ يرسله إلى افتراضه: start إلى البداية، وstop إلى النهاية. ويأخذ text[:] كلَّ شيء، فيخدمَ أيضًا النسخةَ الكلاسيكيةَ بمفتاحٍ واحد.
المؤشرات السالبة: العدُّ من النهاية
ترقّم الرياضياتُ من صفرٍ عند المقدمة. وتضيف بايثون مسطرةً ثانية، تعدّ عكسيًّا من آخر حرفٍ بأعدادٍ سالبة:
text = "Python"
text[-1] # 'n' (آخر حرف)
text[-3:] # 'hon' (آخر 3 أحرف)
text[:-2] # 'Pyth' (كل ما عدا آخر 2)
text[-4:-1] # 'tho'المركزُ هو الحرفُ ذو الرقم من المقدمة. وطلبُ آخرِ ثلاثةِ أحرفٍ هو text[-3:] ، إيماءةٌ ذهنيةٌ صغيرةٌ تُقرأ بطلاقة: الثلاثةُ الأخيرة.
الخطوة: الخطوةُ الوثّابة
بارامترٌ ثالثٌ يضبط كم مركزًا تتخطّى بين انتقاءين:
text = "abcdefghij"
text[::2] # 'acegi' (كل حرفٍ ثانٍ)
text[1::2] # 'bdfhj' (كل حرفٍ ثانٍ ابتداءً من المركز 1)
text[::-1] # 'jihgfedcba' (معكوسة!)
text[::-2] # 'jhfdb' (كل حرفٍ ثانٍ معكوسًا)خطوةٌ سالبةٌ تعكس اتجاهَ السير ، إنها حسابُ بقوةِ سالبة. والانعكاسُ المقدَّسُ [::-1] يستحق حفظًا واحدًا ثابتًا، لأنّ كل ما هو أدقّ بعده تنويعٌ.
الشريحة لا ترمي خطأً قط
فهرسةُ مركزٍ غيرِ موجودٍ ترمي IndexError. أمّا الشريحةُ فألطفُ ، تنكمش على المدى المتاح وتُرجع الموجودَ دون أن تطلب شيئًا في الطريق:
text = "hi"
text[0:100] # 'hi' (لا خطأ، تتوقف فقط عند النهاية)
text[100:200] # '' (سلسلة فارغة)هذا كرمٌ متعمّد: نافذةٌ تمتد وراءَ النهاية تنكمش ببساطةٍ. وحيث تكون الفهرسةُ دعوى، تكون الشريحةُ التماسًا.
الآلةُ نفسها تعزف القوائم
الشريحةُ ليست اختصاصَ السلاسل؛ إنها علامةُ التسلسلات. وتجيب القوائمُ على النداءات نفسها:
nums = [0, 1, 2, 3, 4, 5]
nums[1:4] # [1, 2, 3]
nums[::-1] # [5, 4, 3, 2, 1, 0]كل ما تعلمته عن الحروف ينتقل إلى أيِّ مجموعةٍ مرتَّبةٍ ، وبعيدًا عن القراءة، تقبل القوائمُ إسنادَ شرائحَ حيث ترفضه السلاسل: يستبدل nums[1:3] = [9, 9] نافذةً في موضعها.
مثالٌ محلول: تشريحُ اسمِ ملفٍ
تعيشُ البرامجُ بين أسماءِ ملفاتٍ مثل "report_2026_summary.txt"، والتقطيعُ طريقةُ قراءتِها أجزاءً. الامتدادُ هو الأحرفُ الثلاثةُ الأخيرةُ:
filename = "report_2026_summary.txt"
extension = filename[-3:] # 'txt'
stem = filename[:-4] # 'report_2026_summary'
print(stem, extension) # report_2026_summary txtيقرأ [-3:] من ثلاثِ مواضعَ قبلَ النهايةِ إلى النهاية ، آخرَ ثلاثةِ أحرفٍ. ويقرأ [:-4] من البدايةِ حتى أربعةِ مواضعَ قبلَ النهاية، وهو كلُّ ما قبلَ النقطةِ. وتظهر قاعدةُ الفترةِ شبهِ المفتوحةِ من جديد: يستبعد [:-4] الموضعَ ، أي النقطةَ نفسَها، فلا يتسرّبَ ذيلُ .txt إلى الجذرِ أبدًا. قاعدةٌ واحدةٌ، كلا الطرفينِ.
وعكسُ قراءةِ الأجزاءِ قراءةُ الكلِّ: فحصُ المتناظرةِ سطرٌ واحدٌ من الأداةِ نفسِها:
word = "radar"
print(word == word[::-1]) # Trueأخطاء شائعة
- الخلط بين الفهرسة والشريحة.
text[3]حرفٌ واحدٌ دعوى؛ وtext[3:4]حرفٌ واحدٌ التماسٌ ، وسلسلةٌ جديدة. - اعتبارُ
stopمشمولًا. يسلّمtext[0:3]أحرفَ المراكزِ ؛ والمركزُ 3 هو حيث تُغلق النافذة. - إسنادُ شرائحَ فوق السلاسل. ترفضها السلاسل ، فذاك الامتدادُ امتيازُ القوائم.
- يجب أن توافقَ إشارةُ الخطوةِ الاتجاهَ.
"abcdef"[0:5:-1]فارغةٌ ، نافذةٌ تمشي يمينًا وخطوةٌ تشيرُ يسارًا لا تلتقيانِ في مكانٍ ما. أبقِ البدايةَ والنهايةَ والخطوةَ جميعُها في الاتجاهِ نفسه.
🧩 تحديات
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
اعكس السلسلةَ "racecar" بشريحةٍ.
💡 الجواب: "racecar"[::-1] ← "racecar" ، تُقرأ نفسها من الوجهين، وهو بالضبط سببُ نجاةِ متناظرِ الحروفِ من انعكاسِه.
🧩 تحدٍّ ، فكّر أولًا ثم أظهر
من "abcdefghij"، استخرج كلَّ حرفٍ ثالثٍ: a، d، g، j.
💡 الجواب: "abcdefghij"[::3] ← "adgj" ، البدايةُ الافتراضيةُ تثبّتك عند المركز 0، والخطوةُ 3 تزحف بك عبر المتتاليةِ الحسابية.
🤔 أسئلة سقراطية
- لماذا لا ترمي الشريحةُ خطأً قط حيث ترميه الفهرسة؟ وأيُّ موقفٍ يفصل بينهما؟
- بإسنادِ شريحةٍ فقط، كيف تبادل عنصرينِ من قائمةٍ؟
- إذا كانت
text[::-1]تعكس، فأيُّ سطرٍ يخبرك هل السلسلةُ متناظرةُ الحروف؟
✅ فحص سريع
١. ماذا ترجع "Python"[1:4]؟
٢. كيف تعكس سلسلةً s؟