لغة بايثون لسلسلة (تسطيح) عدد لا نهائي من التكرارات المحدودة؟[ينسخ]

StackOverflow https://stackoverflow.com/questions/120886

  •  02-07-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لنفترض أن لدينا مكررًا (مكررًا لا نهائيًا) يُرجع قوائم (أو مكررات محدودة)، على سبيل المثال يتم إرجاعه بواسطة

infinite = itertools.cycle([[1,2,3]])

ما هي لغة بايثون الجيدة للحصول على مكرر (لانهائي بشكل واضح) سيعيد كل عنصر من المكرر الأول، ثم كل عنصر من العنصر الثاني، وما إلى ذلك.في المثال أعلاه سيعود 1,2,3,1,2,3,....المكرر لانهائي، لذلك itertools.chain(*infinite) لن يعمل.

متعلق ب

هل كانت مفيدة؟

المحلول

بدءًا من Python 2.6، يمكنك استخدام itertools.chain.from_iterable:

itertools.chain.from_iterable(iterables)

يمكنك أيضًا القيام بذلك باستخدام فهم المولد المتداخل:

def flatten(iterables):
    return (elem for iterable in iterables for elem in iterable)

نصائح أخرى

استخدام المولد:

(item for it in infinite for item in it)

يتم فك البنية * في صف من أجل تمرير الوسيطات، لذلك لا توجد طريقة لاستخدامها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top