Itertools هي واحدة من مكتبات بايثون الأكثر إثارة للاهتمام. يحتوي على سلسلة من الوظائف المستوحاة من اللغات الوظيفية المستخدمة للعمل مع التكرارات.
سأذكر في هذا المقال بعضًا من أكثر الأشياء التي لفتت انتباهي والتي تستحق أن تضعها في الاعتبار حتى لا تعيد اختراع العجلة في كل مرة.
لقد قمت بتنفيذ عدد لا نهائي من المرات (حسنًا، سينتهي
صراحة في مرحلة ما مع استراحة) باستخدام حلقة True while. تقدم لنا itertools بديلاً أفضل:
from itertools import count for i in count(start=2, step=2): if i > 10: break print(i)
2 4 6 8 10
كما يتبين في المثال، لولا الفاصل، لكان العد سيرجع أرقامًا لا حصر لها. الكود أعلاه يعادل تقريبًا:
i = 2 while True: if i > 10: break print(i) i = 2
2 4 6 8 10
وظيفة للقيام بشيء شائع جدًا: الحصول على البيانات من دفق على دفعات بحجم n. دعونا نلقي نظرة على مثال:
from itertools import batched sequence = [1, 2, 3, 4, 5, 6, 7] for batch in batched(sequence, 2): # lotes de tamaño 2 print(batch)
(1, 2) (3, 4) (5, 6) (7,)
تجدر الإشارة إلى أن الدفعة الأخيرة قد يكون حجمها أقل من أو يساوي n كما في هذه الحالة. مفيد جدًا، ألا تعتقد ذلك؟
وظيفة أخرى بسيطة ومفيدة. بالنظر إلى التسلسل (في الواقع، بالنظر إلى المكرر)، فإنه يعطينا عناصره في أزواج.
دعونا نرى ذلك بشكل أفضل بمثال:
from itertools import pairwise sequence = [1, 2, 3, 4, 5, 6, 7] for a, b in pairwise(sequence): print(a, b)
1 2 2 3 3 4 4 5 5 6 6 7
عدد الأزواج أقل بواحد من حجم تسلسل الإدخال.
أخيرًا، بالنسبة لهذا الإدخال القصير، أريد أن أتحدث عن المنتج، أ
تنفيذ المنتج الديكارتي.
مفيد لاستبدال حلقات متداخلة من خلال تدفقي بيانات:
from itertools import product A = [1, 2, 3] B = [5, 6, 7] for a, b in product(A, B): print(a, b)
1 5 1 6 1 7 2 5 2 6 2 7 3 5 3 6 3 7
يتلقى معلمة تسمح لنا بعمل المنتج الديكارتي لـ
التسلسل مع نفسه:
from itertools import product A = [1, 2, 3] for a1, a2, a3 in product(A, repeat=3): print(a1, a2, a3)
1 1 1 1 1 2 1 1 3 1 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 2 1 1 2 1 2 2 1 3 2 2 1 2 2 2 2 2 3 2 3 1 2 3 2 2 3 3 3 1 1 3 1 2 3 1 3 3 2 1 3 2 2 3 2 3 3 3 1 3 3 2 3 3 3
في مقال مستقبلي، سأذكر وظائف أخرى لهذه الوحدة المفيدة
مكتبة بايثون القياسية. آمل أن يكون مفيدًا لك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3