cb
codebamin
الفصل 8 · الحلقات المتداخلة (Nested Loops)

مقدمة إلى القوائم المتداخلة ثنائية الأبعاد

تمرين: لديك قائمة من النصوص، وهدفك طباعة الحرف الأول من النص الثاني في القائمة. مثلًا إذا كانت القائمة:

__copyable__ strings = ["abc", "def", "ghi"]

فيجب أن تطبع d.

ربما حللت التمرين السابق هكذا:

string = strings[1] print(string[0])

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

print(strings[1][0])

تأمل هذه الصيغة جيدًا. قد تبدو جديدة، لكنها مجرد الفهرسة المعتادة مطبقة مرتين. تتبع التعبير خطوة بخطوة لترى كيف يقسمه بايثون إلى أجزاء أصغر.

باستخدام الصيغة نفسها، عدّل البرنامج ليطبع الحرف الأخير من النص قبل الأخير في القائمة strings.

يجب أن تستخدم تعبيرًا واحدًا مثل المثال السابق، ولا يُسمح باستخدام len. ويجب أن يعمل الحل لأي قائمة غير فارغة من النصوص. في المثال السابق يجب أن يطبع f.

أحسنت!

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

__program_indented__

كما رأيت، يسمح بايثون بوجود قوائم متداخلة: قائمة يكون كل عنصر فيها قائمة أخرى، ونسمّي هذه القوائم الداخلية قوائم فرعية (sublists).

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

استخدم تعبيرًا واحدًا فقط كما في التمرين السابق. بالنسبة إلى القائمة الموجودة في المثال يجب أن يطبع البرنامج y.

ممتاز! أصبحت الآن تفهم الفهرسة المتداخلة جيدًا.

وما زالت كل دوال وأساليب القوائم التي تعلمناها تعمل مع القوائم الداخلية. مثلًا يمكننا إضافة كلمة جديدة إلى آخر قائمة فرعية في strings بعد 'you' هكذا:

strings[1].append("today?")

فـstrings[1] قائمة عادية مثل أي قائمة أخرى.

في الدرس التالي ستتعلم كيف تمر تكراريًا على القوائم المتداخلة.

solution.py
1
2
3
4
5
6
7
8
9
10
الطرفية (shell)
>>>