itertools: Kombinatorika
Hasilkan permutasi, kombinasi, dan produk Kartesius.
itertools: Kombinatorika adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Gambaran Umum Kombinatorika
itertools menyediakan empat fungsi kombinatorika: product, permutations, combinations, dan 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) menghitung hasil kali Kartesius — setara dengan perulangan for bersarang.
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) menghasilkan semua susunan berurutan dengan panjang r. Total: 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) menghasilkan semua pilihan tak berurutan dengan panjang r tanpa pengulangan. Total: 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) memungkinkan sebuah elemen muncul lebih dari sekali dalam suatu kombinasi.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]Menghitung Tanpa Membentuk Semua Elemen
Gunakan math.perm, math.comb, atau pintasan len() (berfungsi untuk hasil berhingga), alih-alih menghasilkan semua elemen hanya untuk menghitungnya.
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120Pembuatan Kata Sandi/Kunci
Iterator kombinatorika berguna untuk menghasilkan kandidat kunci atau kasus pengujian tanpa memuat semuanya ke memori.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingKoordinat Kisi dengan product
Gunakan product(range(rows), range(cols)) untuk melakukan iterasi pada kisi 2D tanpa perulangan bersarang.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")Menguji Semua Himpunan Bagian
Hasilkan semua himpunan bagian dari sebuah daftar dengan melakukan iterasi pada combinations untuk setiap panjang dari 0 hingga 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)Menghapus Duplikasi dengan combinations
Gunakan combinations untuk membandingkan setiap pasangan elemen tepat satu kali, sehingga perbandingan duplikat (a,b) dan (b,a) dapat dihindari.
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}")Pertimbangan Kinerja
Urutan kombinatorika berkembang sangat cepat. permutations(range(12)) menghasilkan 479 juta hasil. Selalu gunakan generator dan bentuk hanya hasil yang Anda perlukan.
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 earlyPemeriksaan Cepat
Fungsi itertools mana yang menghasilkan semua pasangan tak berurutan (tanpa pengulangan) dari suatu koleksi?
Ringkasan
Gunakan product untuk hasil kali Kartesius, permutations untuk susunan berurutan, combinations untuk himpunan bagian tak berurutan, dan combinations_with_replacement jika elemen dapat berulang. Selalu proses iterator kombinatorika secara malas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “itertools: Kombinatorika” gratis?
Ya — teks lengkap “itertools: Kombinatorika” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “itertools: Kombinatorika”?
Hasilkan permutasi, kombinasi, dan produk Kartesius. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “itertools: Kombinatorika” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- itertools: Iterator Tak Terbatas dan Terbatas
- itertools: Kombinatorika
- functools: partial dan reduce
- functools: lru_cache dan cached_property