9.4 قوائم متداخلة
أهداف التعلم
في نهاية هذا القسم، ينبغي أن تكون قادرًا على:
- إظهار استخدام قائمة من قوائم لتنظيم البيانات.
- إظهار الوصول إلى العناصر الفردية باستخدام الفهرسة ذات الأبعاد المتعددة.
- استخدام حلقات متداخلة للتكرار على قائمة من قوائم.
قائمة من قوائم
يمكن أن تتكون القوائم من أي نوع من العناصر. يمكن أن يكون عنصر القائمة أيضًا قائمة. مثال: [2, [3, 5], 17] هي قائمة صالحة، إذ تشغل القائمة [3, 5] الموضعَ ذا الفهرس 1.
عندما تكون القائمة عنصرًا داخل قائمة أكبر، تُسمّى قائمة متداخلة (nested list). القوائم المتداخلة مفيدة للتعبير عن البيانات متعددة الأبعاد. عندما يكون كل عنصر من عناصر القائمة الأكبر قائمةً أصغر، تُسمى القائمة الأكبر قائمة من قوائم (list-of-lists).
مثال: يمكن تخزين جدول في صورة قائمة من قوائم ثنائية البُعد، إذ يمثل كل صف من البيانات قائمةً داخلها.
مفاهيم تطبيقية
القوائم
لكل سؤال من الأسئلة أدناه، استعن بالمصفوفة التالية:
استخدام حلقات متداخلة للتكرار على قوائم متداخلة
يمكن استخدام بنية حلقة متداخلة للتكرار على قائمة من قوائم. بالنسبة لقائمة من قوائم ثنائية الأبعاد، يمكن استخدام حلقة التكرار المحدد الخارجية للصفوف، وحلقة التكرار المحدد الداخلية للأعمدة.
مثال 9.4
التكرار على قائمة من قوائم
توضح الشِفرة أدناه كيفية التكرار على قائمة من قوائم.
تمر الحلقة الخارجية في السطر 9 على عناصر القائمة الأكبر واحدًا تلو الآخر. كل عنصر في القائمة الأكبر هو قائمة. وتمر الحلقة الداخلية في السطر 10 على كل عنصر في كل قائمة متداخلة.
1 | """Iterating a list-of-lists.""" |
2 | |
3 | # إنشاء قائمة أعداد |
4 | list1 = [[1, 2, 3], |
5 | [1, 4, 9], |
6 | [1, 8, 27]] |
7 | |
8 | # التكرار على قائمة من قوائم |
9 | for row in list1: |
10 | for num in row: |
11 | print(num, end=" ") |
12 | print() |
ناتج الشِفرة أعلاه:
1 2 3
1 4 9
1 8 27
مفاهيم تطبيقية
التكرار على قائمة من قوائم
لكل سؤال أدناه، استعن بالقائمة التالية:
my_list = [[7, 4, 5, 12],
[24, 3, 9, 16],
[12, 8, 91, -5]]
جرّب بنفسك
ضرب المصفوفات
اكتب برنامجًا يحسب ناتج ضرب المصفوفات matW و matZ أدناه ويطبع النتيجة. النتيجة المتوقعة موضحة.
في مصفوفة النتيجة، يُحسب كل عنصر وفقًا لموقع العنصر. تُحسب النتيجة في الموضع [i][j] باستخدام الصف i من المصفوفة الأولى، W، والعمود j من المصفوفة الثانية، Z.
مثال:
result[1][2] = (الصف 1 في W) مضروبًا في (العمود 2 في Z)