دليل لتسوية القائمة وقائمة القوائم في بايثون

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

سوف نستكشف بعضًا منهم في هذا البرنامج التعليمي.

دعونا نرى مثالا.

إدخال

[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

انتاج |

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. الحلقات

الطريقة الأكثر شيوعًا لحل المشكلة هي استخدام الحلقات. أعتقد أن معظمكم قد حصل عليها بالفعل. دعونا نرى خطوات حل المشكلة باستخدام الحلقات.

  • ابدأ قائمة القوائم ببيانات وهمية وقم بتسميتها كبيانات.
  • الآن ، قم بتهيئة قائمة فارغة تسمى flat_list.
  • كرر على البيانات.
    • فك جميع العناصر من القائمة الحالية.
    • قم بإضافتها إلى القائمة المسطحة باستخدام طريقة إلحاق القائمة.
  • اطبع النتيجة.

انظر رمز المشكلة أدناه.

# initializing the data and an empty list
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
flat_list = []

# iterating over the data
for item in data:
    # appending elements to the flat_list
    flat_list += item

# printing the resultantn flat_list
print(flat_list)

يمكنك استخدام حلقة أخرى لإضافة عناصر قائمة فرعية إلى قائمة مسطحة بدلاً من عامل سلسلة. يمكننا أيضًا استخدام list comprehensions بدلاً من التكرار الحلقي.

  كيفية تعيين الحد الأقصى لمعدل الإطارات في برامج تشغيل NVIDIA

كلاهما يقوم بنفس العمل. دعونا نرى الطريقة التالية لحل المشكلة.

# 2. Itertools – سلسلة

سنستخدم طريقة تسمى سلسلة من الوحدة النمطية المضمنة في itertools.

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

دعونا نرى الخطوات المتبعة في حل المشكلة.

  • ابدأ قائمة القوائم ببيانات وهمية وقم بتسميتها كبيانات.
  • احصل على التسوية القابلة للتكرار باستخدام itertools.chain (* البيانات).
  • تحويل الناتج المتكرر إلى قائمة.
  • اطبع القائمة المسطحة.

يمكنك الذهاب من خلال الكود في المقتطف أدناه.

# importing the module
import itertools

# initializing the data
data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]

# flattening the list and storing the result
flat_list = itertools.chain(*data)

# converting iterable to list and printing
print(list(flat_list))

# 3. تسطيح القوائم متعددة المستويات

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

  8 أسواق Solana NFT للمعاملات السريعة والمنخفضة لرسوم الغاز

إدخال

[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]

انتاج |

[1, 2, 3, 4, 5, 6, 7, 8, 9]

نظرًا لأننا لا نعرف عمق القوائم قبل البرنامج ، يتعين علينا استخدام العودية لحل المشكلة.

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

تفو! الكثير من الخطوات للترميز. لا تقلق. لن يستغرق تحويل العبارات أعلاه إلى رمز أكثر من دقيقة.

# initializing the data and empty list
data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
flat_list = []

# function
def flatten_list(data):
    # iterating over the data
    for element in data:
        # checking for list
        if type(element) == list:
            # calling the same function with current element as new argument
            flatten_list(element)
        else:
            flat_list.append(element)

# flattening the given list
flatten_list(data)

# printing the flat_list
print(flat_list)

تذكر أننا لم نحول القائمة الحالية. بدلاً من ذلك ، قمنا بإنشاء قائمة جديدة مع عنصر القائمة المحدد.

  11 من أفضل برامج تحرير الصور الاحترافية [Photoshop and Lightroom Alternatives]

استنتاج

أتمنى أن تكون قد استمتعت بالبرنامج التعليمي. قد يكون هناك العديد من الطرق الأخرى لتسوية القائمة في Python لكنني شعرت أن ما ورد أعلاه ربما يكون أسهلها.

ترميز سعيد 🙂