• 0

طباعة عنصر في قوائم متداخلة في بايثون

لدي قائمة 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

 

1 شخص أعجب بهذا

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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 يختبر هل الوسيط الأول من النوع المساوي للوسيط الثاني وعليه نحدد هل العنصر الحالي هو قائمة أو لا.
2 اشخاص أعجبوا بهذا

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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)

 

1 شخص أعجب بهذا

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


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

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

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

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


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

تسجيل الدخول

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


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