0Pricing
Python Academy · Pelajaran

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))  # 6

combinations()

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))  # 6

combinations_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))   # 120

Pembuatan 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 materialising

Koordinat 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 early

Pemeriksaan 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

  1. itertools: Iterator Tak Terbatas dan Terbatas
  2. itertools: Kombinatorika
  3. functools: partial dan reduce
  4. functools: lru_cache dan cached_property
← Kembali ke Python Academy