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

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

ahmed1990

السؤال

أريد أن أقوم بتسطيح (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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...