itertools: Kombinatorik
Permütasyonlar, kombinasyonlar ve kartezyen çarpımlar oluşturun.
itertools: Kombinatorik, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
Kombinatorik Genel Bakış
itertools dört kombinatorik işlev sağlar: product, permutations, combinations ve 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), iç içe for döngülerine eşdeğer olan Kartezyen çarpımı hesaplar.
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), uzunluğu r olan tüm sıralı dizilimleri üretir. Toplam: 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), tekrarsız, uzunluğu r olan tüm sırasız seçimleri üretir. Toplam: 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), bir öğenin bir kombinasyonda birden fazla kez görünmesine izin verir.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]Somutlaştırmadan Sayma
Sırf saymak için tüm öğeleri üretmek yerine math.perm, math.comb veya len() kısayolunu kullanın (len() sonlu sonuçlarda çalışır).
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120Parola/Anahtar Üretimi
Kombinatorik yineleyiciler, her şeyi belleğe yüklemeden aday anahtarlar veya sınama durumları üretmek için kullanışlıdır.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingproduct ile Izgara Koordinatları
İç içe döngüler kullanmadan 2B bir ızgarada yinelemek için product(range(rows), range(cols)) kullanın.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")Tüm Alt Kümeleri Sınama
0'dan n'ye kadar her uzunluk için combinations üzerinde yineleyerek bir listenin tüm alt kümelerini oluşturun.
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 ile Yinelenenleri Kaldırma
Her öğe çiftini tam olarak bir kez karşılaştırmak ve yinelenen (a,b) ile (b,a) karşılaştırmalarından kaçınmak için combinations kullanın.
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}")Performansla İlgili Noktalar
Kombinatorik diziler çok hızlı büyür. permutations(range(12)) 479 milyon sonuç üretir. Her zaman üreteçleri kullanın ve yalnızca ihtiyacınız olan sonuçları somutlaştırın.
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 earlyHızlı Kontrol
Bir koleksiyondan tekrarsız tüm sırasız ikilileri hangi itertools işlevi üretir?
Özet
Kartezyen çarpımlar için product, sıralı dizilimler için permutations, sırasız alt kümeler için combinations ve öğelerin tekrarlanabildiği durumlarda combinations_with_replacement kullanın. Kombinatorik yineleyicileri her zaman tembel olarak işleyin.
Sıkça Sorulan Sorular
“itertools: Kombinatorik” dersi ücretsiz mi?
Evet — “itertools: Kombinatorik” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“itertools: Kombinatorik” dersinde ne öğreneceğim?
Permütasyonlar, kombinasyonlar ve kartezyen çarpımlar oluşturun. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“itertools: Kombinatorik” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- itertools: Sonsuz ve Sonlu Yineleyiciler
- itertools: Kombinatorik
- functools: partial ve reduce
- functools: lru_cache ve cached_property