الوحدة itertools‎ في بايثون

من موسوعة حسوب


تقّدم الوحدة itertools مجموعة من الأدوات المُساعدة على بناء مُكرّرات مُشابهة لتلك المتوفّرة في لغات مثل APL، وHaskell وSML. بُني كلّ منها بطريقة تُناسب لغة بايثون.

الأدوات المُتوفّرة سريعة وتستخدم الذّاكرة بشكل فعّال، وهي مُفيدة سواء بمُفردها أو عبر دمج بعضها ببعض. وعند دمجها مع بعض، تُشكّل "جبرَ مُكرّرات” تُعدّ وسيلة يُمكن استعمالها لإنشاء أدوات أكثر تخصّصًا بشكل فعّال باستخدام بايثون فقط دون الحاجة إلى أيّة لغة برمجيّة أخرى.

تُوفّر لغة SML مثلًا الدّالة tabulate‎(f)‎ التي تُنتج السّلسلة ‎f(0)‎,‎ ‎f(1)‎,‎ ‎...‎‎. يُمكن الحصول على نفس النّتيجة في بايثون عبر دمج الدّالة map‎()‎ والدّالة count‎()‎ على شكل ‎map‎(‎f‎, ‎count‎(‎)‎)‎.

تعمل هذه الأدوات والدّوال المبنيّة المُكافئة لها جيّدًا مع الدّوال السّريعة الموجودة في الوحدة operator أيضًا. فمثلًا يُمكن ربط عامل الضّرب (multiplication operator) بين متّجهتين (vectors) لتشكيل جداء سُلميّ (dot-product) فعّال:

sum(map(operator.mul, vector1, vector2))

مكررات لامتناهية

itertools.count()‎

تعيد مُكرّرًا يُعيد قيمًا مُتساويّة الفرق بدءًا من قيمةٍ بدئيّة.

itertools.cycle()‎

تعيد مُكرّرًا يُعيد عناصر الكائن القابل للتّكرار المُعطى ويحفظ نسخة منه، عندما تنتهي قيم الكائن القابل للتّكرار، يُعيد المُكرّر عناصر النّسخة المحفوظة، ويُكرّر ذلك مرارًا وتكرارًا دون نهاية.

itertools.repeat()‎

تعيد مُكرّرًا يُعيد كائنًا مرارًا وتكرارًا بشكل لا نهائي أو لعدد مُحدّد من المرّات.

مكررات تنتهي عند أقصر تسلسل

itertools.accumulate()‎

تعيد مُكرّرًا يُعيد مجموعات مُتراكمة، أو نتائج مُتراكمةً من دالّة أخرى.

itertools.chain()‎

تعيد مُكرّرًا يُعيد عناصر الكائن القابل للتكرار الأول حتى تنتهيَ عناصره، ثمّ ينتقل إلى الكائن القابل للتّكرار التّالي إلى أن تنتهي قيّمه وهكذا… وتُستخدم لمُعالجة عدّة تسلسلات على أنّها تسلسل واحد مُستمرّ.

itertools.chain.from_iterable()‎

تعيد مُكرّرًا يُعيد عناصر الكائن القابل للتكرار الأول حتى تنتهيَ عناصره، ثمّ ينتقل إلى الكائن القابل للتّكرار التّالي إلى أن تنتهي قيّمه وهكذا… وتُستخدم لمُعالجة عدّة تسلسلات على أنّها تسلسل واحد مُستمرّ. وتُعدّ الدّالة طريقة بديلة للدّالة itertools.chain()‎، إذ تستقبل هذه الأخيرة عدّة مُعاملات عوضًا عن مُعامل واحد فقط.

itertools.compress()‎

تعيد مُكرّرًا يُرشّح العناصر المتواجدة داخل الكائن القابل للتّكرار المُعطى مُعيدًا فقط تلك التي تملك عنصرًا مُحدّدًا يُساوي القيمة المنطقيّة True. ويتوقّف المُكرّر عندما تنتهي قيم البيانات المُعطاة أو قيم المُحدّدات.

itertools.dropwhile()‎

تعيد ‎مُكرّرًا يُزيل العناصرَ من الكائن القابل للتّكرار المعطى ما دامت العبارة المنطقيّة المُعطاة (التي تكون دالّة تستقبل العنصر وتُعيد قيمة منطقيّة) تُساوي القيمة المنطقيّة True؛ بعد أن تُخالف العبارة المنطقيّة قيمةً منطقيّة صحيحة، يستمرّ المُكرّر بإعادة العناصر المتبقيّة كلّها.

itertools.filterfalse()‎

تعيد مُكرّرًا يُرشّح عناصر الكائن القابل للتّكرار المُعطى مُعيدًا تلك فقط التي تُعيد لها العبارة المنطقيّة المُعطاة القيمة المنطقيّة False‎.

itertools.groupby()‎

itertools.islice()‎

itertools.starmap()‎

itertools.starmap()‎

itertools.tee()‎

itertools.zip_longest()‎

مكررات دامجة

المُكرّرات الدّامجة تدمجُ بين التّسلسلات لإنشاء تسلسلات أخرى.

itertools.product()‎

itertools.permutations()‎

itertools.combinations()‎

itertools.combinations_with_replacement()‎

مصادر