اذهب إلى المحتوى

السؤال

نشر

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

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

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

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

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

Recommended Posts

  • 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)

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...