كيفية عمل قائمة قوائم في بايثون - سهل!

سنرى اليوم كيفية إنشاء قائمة قوائم في بايثون. هناك طرق متعددة للقيام بذلك. لنبدأ ونرى بعض الأساليب.

من أجل Loop وطريقة append ()

الطريقة الأولى بسيطة للغاية ومباشرة. في البداية ، نقوم بإنشاء قائمة فارغة lst1 ، ثم نقوم بتشغيل حلقة وإلحاق القوائم بـ lst1 .



إذا أردنا إدراج ن القوائم الفرعية ، ثم سنضطر إلى تشغيل حلقة ن مرات باستخدام نطاق() وظيفة. دعونا نفهم هذا المفهوم باستخدام مثال.

lst1 = []
for i in range(0, 5):
  lst1.append([])
print(lst1)

انتاج |

[[], [], [], [], []]

هنا ، الحلقة تعمل خمس مرات. في كل تكرار ، نلحق قائمة فارغة بـ lst1 ، مما يسمح لنا بإنشاء قائمة القوائم ، كما ترى في الإخراج.

قائمة الفهم

طريقة أخرى هي استخدام قائمة الفهم التي توفر لنا طريقة أسهل وموجزة. دعونا نرى مثالا.

lst  = [[] for i in range(0, 5)]
print(lst)

انتاج |

[[], [], [], [], []]

تقوم قائمة الفهم دائمًا بإرجاع قائمة تعتمد محتوياتها على التعبيرات الموجودة في حلقة for وشرط if (إن وجد).

في المثال أعلاه ، نضيف قائمة فرعية في كل مرة يتم فيها تشغيل الحلقة ، وبالتالي تحتوي النتيجة على قائمة من القوائم.

مكتبة NumPy

طريقة أخرى لعمل قائمة هي NumPy . إنها مكتبة قوية للحسابات العلمية.

يوفر العديد من الأساليب والأدوات لإنشاء المصفوفات متعددة الأبعاد والعمل معها بكفاءة.

يمكننا عمل قائمة بالقوائم باستخدام فارغة() طريقة مكتبة NumPy. نحتاج إلى تمرير مجموعة تحتوي على حجم الصف وحجم العمود.

يأخذ أيضًا نوع بيانات. بشكل افتراضي ، سيتم إنشاء مصفوفة من النوع numpy.float64 .

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

ضع في اعتبارك الكود التالي:

import numpy as np
np_array = np.empty((5, 0))
lst = np_array.tolist()
print(lst)
print(f"Type of np_array: {type(np_array)} and the type of lst: {type(lst)}")

انتاج |

[[], [], [], [], []]
Type of np_array: <class 'numpy.ndarray'> and the type of lst: <class 'list'>

يمكننا أن نفعل الشيء نفسه باستخدام numpy.ndarray () طريقة. دعونا نرى.

import numpy as np
np_array = np.ndarray((5, 0))
lst = np_array.tolist()
print(lst)

[[], [], [], [], []]

وظيفة الخريطة ()

يمكننا أيضًا إنشاء قائمة قوائم باستخدام لغة Python المدمجة خريطة() وظيفة. خريطة() يأخذ وسيطتين: دالة وقابلة للتكرار.

أنا يستدعي t الوظيفة المحددة لكل عنصر من العناصر القابلة للتكرار ويعيد مكررًا. تأمل المثال التالي.

n=5
lst = [None]*n
lst = list(map(lambda x: [], lst))
print(lst)

انتاج |

[[], [], [], [], []]

أولاً ، نقوم بإنشاء قائمة بـ ن العناصر التي تحتوي على لا أحد . ثم نقوم بتمرير هذه القائمة إلى الخريطة ().

يتم تعيين كل عنصر في القائمة الخارجية إلى قائمة فارغة باستخدام الوظيفة المجهولة. أخيرًا ، نقوم بتحويل المكرر المرتجع (كائن الخريطة) إلى قائمة للحصول على قائمة بالقوائم.

ما الذي عليك عدم فعله

يمكننا إنشاء قائمة أحادية البعد بالطريقة التالية.

lst = [None]*n

هنا، lst سيكون من الحجم ن ، ولكل عنصر قيمة لا أحد . بمعنى آخر ، أي قيمة نضعها داخل الأقواس المربعة تتكرر ن مرات.

لذا إذا وضعنا [] بداخله ، فسنحصل على قائمة قوائم ، أليس كذلك؟ حسنًا ، أنت تفعل ذلك ، لكن كل عنصر يشير إلى نفس الكائن (العنصر الأول). ببساطة ، نحصل عليه ن نفس القوائم الفرعية. دعونا نرى.

n=5
lst = [[]]*n
print(lst)
#append an item to the last list
lst[n-1].append(3)
print(lst)

انتاج |

[[], [], [], [], []]
[[3], [3], [3], [3], [3]]

ضع في اعتبارك رمزًا آخر.

n=5
lst = []
new_list =  [lst for i in range(0, n)]
#append an item to the last list
new_list[n-1].append(3)
print(lst)
print(new_list)

ينشئ هذا الرمز أعلاه أيضًا خمسة مراجع للمتغير lst . لذا ، new_list [0] ، new_list [1] ،… new_list [n-1] تشير إلى نفس العنوان المشار إليه بواسطة lst .

انتاج |

[3]
[[3], [3], [3], [3], [3]]

يستخدم lst [:] بدلاً من lst أو انسخ القائمة صراحةً باستخدام ينسخ() من ينسخ وحدة.