itertools: التوافقيات
ولّد التبديلات والتوافيق والجداءات الديكارتية
itertools: التوافقيات درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
نظرة عامة على التوافقيات
توفر itertools أربع دوال توافقية: product وpermutations وcombinations وcombinations_with_replacement.
import itertools
# All orderings of 2 items from ABC
print(list(itertools.permutations("ABC", 2)))
# [(A,B),(A,C),(B,A),(B,C),(C,A),(C,B)]product()
يحسب product(*iterables, repeat=1) الجداء الديكارتي، وهو مكافئ لحلقات for متداخلة.
import itertools
print(list(itertools.product([1,2], ["a","b"])))
# [(1,"a"),(1,"b"),(2,"a"),(2,"b")]
# repeat=2 pairs each element with itself
print(list(itertools.product(range(2), repeat=2)))
# [(0,0),(0,1),(1,0),(1,1)]permutations()
يُنتج permutations(it, r) جميع الترتيبات المنظمة ذات الطول r. العدد الإجمالي: P(n,r) = n!/(n-r)!.
import itertools
result = list(itertools.permutations([1,2,3], 2))
print(result)
# [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)]
print(len(result)) # 6combinations()
يُنتج combinations(it, r) جميع الاختيارات غير المنظمة ذات الطول r، من دون تكرار. العدد الإجمالي: C(n,r) = n!/(r!(n-r)!).
import itertools
result = list(itertools.combinations([1,2,3,4], 2))
print(result)
# [(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
print(len(result)) # 6combinations_with_replacement()
يسمح combinations_with_replacement(it, r) بظهور العنصر أكثر من مرة في التركيبة.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]العدّ دون إنشاء العناصر في الذاكرة
استخدم math.perm أو math.comb أو الاختصار len() (الذي يعمل مع النتائج المحدودة) بدلًا من إنشاء جميع العناصر لمجرد عدّها.
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120إنشاء كلمات المرور والمفاتيح
تفيد مكررات التوافقيات في إنشاء مفاتيح مرشحة أو حالات اختبار دون تحميل كل شيء إلى الذاكرة.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingإحداثيات الشبكة باستخدام product
استخدم product(range(rows), range(cols)) للتكرار عبر شبكة ثنائية الأبعاد دون حلقات متداخلة.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")اختبار جميع المجموعات الجزئية
أنشئ جميع المجموعات الجزئية لقائمة من خلال تكرار combinations لكل طول من 0 إلى n.
import itertools
items = [1, 2, 3]
all_subsets = []
for r in range(len(items)+1):
all_subsets.extend(itertools.combinations(items, r))
print(all_subsets)إزالة التكرارات باستخدام combinations
استخدم combinations لمقارنة كل زوج من العناصر مرة واحدة فقط، وتجنّب المقارنات المكررة بين (a,b) و(b,a).
import itertools
words = ["apple","apricot","banana","blueberry"]
for a, b in itertools.combinations(words, 2):
if a[0] == b[0]:
print(f"Same letter: {a}, {b}")اعتبارات الأداء
تنمو المتتاليات التوافقية بسرعة كبيرة جدًا. ينتج permutations(range(12)) 479 مليون نتيجة. استخدم المولدات دائمًا، وأنشئ في الذاكرة ما تحتاج إليه فقط.
import itertools, math
n = 12
print(f"P(12,12) = {math.factorial(n):,}") # 479,001,600
# Never: list(itertools.permutations(range(12)))
# Instead: iterate lazily and break earlyتحقق سريع
ما دالة itertools التي تنتج جميع الأزواج غير المنظمة (من دون تكرار) من مجموعة؟
مراجعة
استخدم product للجداءات الديكارتية، وpermutations للترتيبات المنظمة، وcombinations للمجموعات الجزئية غير المنظمة، وcombinations_with_replacement عندما يُسمح بتكرار العناصر. عالج مكررات التوافقيات بطريقة كسولة دائمًا.
الأسئلة الشائعة
هل درس «itertools: التوافقيات» مجاني؟
نعم — نص درس «itertools: التوافقيات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «itertools: التوافقيات»؟
ولّد التبديلات والتوافيق والجداءات الديكارتية تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «itertools: التوافقيات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- itertools: المكرّرات اللانهائية والمحدودة
- itertools: التوافقيات
- functools: partial وreduce
- functools: lru_cache وcached_property