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

السؤال

نشر

لدي قائمة list تحتوي على عدد كبير من القوائم بداخلها وكل قائمة داخلية تحتوي بدورها على قوائم أخرى كالتالي على سبيل المثال:

[
  [
    [1,2,3], 
    4, 
    5
  ],
  [
    None, 
    [7,8,9], 
    [‘hi’,11,True]
  ], 
  [1,2,3]
]

المشكلة أن هذه القوائم متداخلة بطريقة عشوائية، كيف أقوم بطباعة كل العناصر في هذه القوائم لتكون النتيجة كالتالي:

1,2,3,4,5,None,7,8,9,’hi’,11,True,1,2,3

 

Recommended Posts

  • 1
نشر

يمكننا المرور على القوائم بالطريقة التراجعية وهي خوارزيمة تقوم على استدعاء نفسها عدة مرات، حيث لكل عنصر سوف نختبر هل هو عنصر وحيد؟ إن كان عنصر وحيد نضيفه للقائمة النهائية (خرج الخوارزمية) وإن كان قائمة نقوم باستدعاء عودي/تراجعي لهذه القامة الفرعية:

def flatten(nested_list):
    if len(nested_list) == 0:
        return nested_list
    if isinstance(nested_list[0], list):
        return flatten(nested_list[0]) + flatten(nested_list[1:])
    return nested_list[:1] + flatten(nested_list[1:])


print(flatten([[1, 2, 3, 4], [5, 6, 7], [8, 9], 10]))

#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  • isinstance يختبر هل الوسيط الأول من النوع المساوي للوسيط الثاني وعليه نحدد هل العنصر الحالي هو قائمة أو لا.
  • 0
نشر

يمكنك استخدام المكتبة itertools بالشكل التالي:

import itertools

anylist = [[1,2,3],4,5,[7],[8,9]]
merged = list(itertools.chain(*anylist))

وبشكل مشابه أيضاً استخدام itertools.chain.from_iterable:

merged = list(itertools.chain.from_iterable(list2d))

وبشكل يدوي، يمكنك البحث عن مصطلع flat ضمن المصفوفات في بايثون، فيمكنك إجراء السابق بنفس الطريقة من خلال:

newList = [item for childList in t for item in childList]

والتي تماثل:

newList = []
for childList in t:
    for item in childList:
        newList.append(item)

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...