مقدمة إلى القوائم المتداخلة ثنائية الأبعاد
تمرين: لديك قائمة من النصوص، وهدفك طباعة الحرف الأول من النص الثاني في القائمة. مثلًا إذا كانت القائمة:
strings = ["abc", "def", "ghi"]
فيجب أن تطبع d.
كيف تصل إلى النص الثاني في القائمة؟
وبعدها كيف تصل إلى محرف محدد داخل النص؟
تذكر أن فهرسة القوائم والنصوص متشابهة جدًا.
ربما حللت التمرين السابق هكذا:
string = strings[1]
print(string[0])
هناك طريقة أقصر. التعبير strings[1] تعبير عادي مثل أي تعبير آخر، ويمكن استخدام الفهرسة [0] مع أي تعبير، وليس مع المتغيرات فقط. لذلك تستطيع الاستغناء عن المتغير الوسيط وكتابة:
print(strings[1][0])
تأمل هذه الصيغة جيدًا. قد تبدو جديدة، لكنها مجرد الفهرسة المعتادة مطبقة مرتين. تتبع التعبير خطوة بخطوة لترى كيف يقسمه بايثون إلى أجزاء أصغر.
باستخدام الصيغة نفسها، عدّل البرنامج ليطبع الحرف الأخير من النص قبل الأخير في القائمة strings.
يجب أن تستخدم تعبيرًا واحدًا مثل المثال السابق، ولا يُسمح باستخدام len. ويجب أن يعمل الحل لأي قائمة غير فارغة من النصوص. في المثال السابق يجب أن يطبع f.
هذا يشبه التمرين السابق جدًا.
هل تتذكر كيف تصل إلى آخر موضع في قائمة من دون استخدام
len؟وبالطريقة نفسها، كيف تصل إلى الموضع قبل الأخير؟
إذا نسيت، يمكنك البحث عنه.
الفهرسة تعمل بالطريقة نفسها تقريبًا مع القوائم والنصوص.
هل يظهر لك خطأ
index out of range؟ هل سببه نص أم قائمة؟ ولماذا؟تأكد أنك لا تعكس ترتيب فهرس القائمة وفهرس النص.
إذا تعثرت، تتبع التعبير خطوة بخطوة.
أحسنت!
تطبيق الفهرسة مرتين يصبح أقوى عندما لا تكون لدينا قائمة نصوص فقط، وإنما قائمة تحتوي على قوائم. ما الذي سيطبعه البرنامج التالي؟
strings = [['hello', 'there'], ['how', 'are', 'you']]
print(strings[1][0])
كما رأيت، يسمح بايثون بوجود قوائم متداخلة: قائمة يكون كل عنصر فيها قائمة أخرى، ونسمّي هذه القوائم الداخلية قوائم فرعية (sublists).
ويمكننا استخدام الفهرسة أكثر من مرتين. اكتب برنامجًا يأخذ قائمة متداخلة باسم strings مثل السابقة، ويطبع الحرف الأول من النص الثالث داخل القائمة الفرعية الثانية.
استخدم تعبيرًا واحدًا فقط كما في التمرين السابق. بالنسبة إلى القائمة الموجودة في المثال يجب أن يطبع البرنامج y.
هذا يشبه التمارين السابقة جدًا.
كم مرة تحتاج إلى استخدام الفهرسة؟
أولًا تحتاج إلى الوصول إلى قائمة فرعية.
ثم إلى نص داخل تلك القائمة.
ثم إلى محرف داخل ذلك النص.
إذا تعثرت، تتبع التعبير خطوة بخطوة.
ممتاز! أصبحت الآن تفهم الفهرسة المتداخلة جيدًا.
وما زالت كل دوال وأساليب القوائم التي تعلمناها تعمل مع القوائم الداخلية. مثلًا يمكننا إضافة كلمة جديدة إلى آخر قائمة فرعية في strings بعد 'you' هكذا:
strings[1].append("today?")
فـstrings[1] قائمة عادية مثل أي قائمة أخرى.
في الدرس التالي ستتعلم كيف تمر تكراريًا على القوائم المتداخلة.