• 0

كيف أقوم بتسطيح قائمة متداخلة في بايثون؟

أريد أن أقوم بتسطيح (Flatten) قائمة من القوائم (قائمة متداخلة) في البايثون، فلو فرضنا أن لدي هذه القائمة:

L = [[[1, 2, 3], [4, 5]], 6]

فكيف أستطيع تحويلها إلى هذه القائمة:

[1, 2, 3, 4, 5, 6]

أي أنني أريد حذف تداخل القوائم.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

هنالك عدة طرق يمكنك استخدامها لتسطيح قائمة معينة في بايثون، فيمكنك ببساطة استخدام دالة flatten من وحدة compiler.ast كما في المثال التالي:

>>> from compiler.ast import flatten
>>> flatten([0, [1, 2], [3, 4, [5, 6]], 7])
[0, 1, 2, 3, 4, 5, 6, 7]

كما يمكنك إنشاء دالة لتسطيح القائمة كما في هذا المثال:

def flatten(x):
    if isinstance(x, collections.Iterable):
        return [a for i in x for a in flatten(i)]
    else:
        return [x]

أو يمكنك إنشاء الدالة بطريقة أخرى إذا كنت تستخدم إصدار 2.6 من بايثون كما في المثال التالي:

def flatten(l):
    for el in l:
        if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
            for sub in flatten(el):
                yield sub
        else:
            yield el

في الإصدار 3 من البايثون تم الاستغناء عن basestring لكن يمكنك استخدام هذا السطر بدلا عنها وسوف تحصل على نفس النتيجة:

basestring = (str, bytes)

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن