ahmed1990 نشر 18 أكتوبر 2015 أرسل تقرير نشر 18 أكتوبر 2015 أريد أن أقوم بتسطيح (Flatten) قائمة من القوائم (قائمة متداخلة) في البايثون، فلو فرضنا أن لدي هذه القائمة:L = [[[1, 2, 3], [4, 5]], 6]فكيف أستطيع تحويلها إلى هذه القائمة:[1, 2, 3, 4, 5, 6]أي أنني أريد حذف تداخل القوائم. اقتباس
0 هشام رزق الله نشر 18 أكتوبر 2015 أرسل تقرير نشر 18 أكتوبر 2015 هنالك عدة طرق يمكنك استخدامها لتسطيح قائمة معينة في بايثون، فيمكنك ببساطة استخدام دالة 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)المصدر اقتباس
السؤال
ahmed1990
أريد أن أقوم بتسطيح (Flatten) قائمة من القوائم (قائمة متداخلة) في البايثون، فلو فرضنا أن لدي هذه القائمة:
فكيف أستطيع تحويلها إلى هذه القائمة:
أي أنني أريد حذف تداخل القوائم.
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.