Python Academy · Oppitunti

itertools: kombinatoriikka

Tuottakaa permutaatioita, kombinaatioita ja karteesisia tuloja.

Oppitunti 2/413 vaihetta

itertools: kombinatoriikka on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Kombinatoriikan yleiskatsaus

itertools tarjoaa neljä kombinatorista funktiota: product, permutations, combinations ja 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) laskee karteesisen tulon — se vastaa sisäkkäisiä for-silmukoita.

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) tuottaa kaikki r-pituiset järjestetyt muodostelmat. Yhteensä: 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) tuottaa r-pituiset järjestämättömät valinnat ilman toistoa. Yhteensä: 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) sallii saman alkion esiintymisen yhdistelmässä useammin kuin kerran.

import itertools

result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]

Laskeminen ilman materialisointia

Käyttäkää kaikkien alkioiden luomisen sijaan math.perm- tai math.comb-funktiota tai len()-oikopolkua (joka toimii äärellisillä tuloksilla), jos haluatte vain laskea alkiot.

import math

print(math.perm(10, 3))   # 720
print(math.comb(10, 3))   # 120

Salasanojen ja avainten luominen

Kombinatoriikan iteraattorit soveltuvat ehdokasavainten tai testitapausten luomiseen ilman, että kaikkea ladataan muistiin.

import itertools, string

chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
    pass  # process without materialising

Ruudukon koordinaatit product-funktiolla

Käyttäkää product(range(rows), range(cols))-funktiota 2D-ruudukon läpikäymiseen sisäkkäisten silmukoiden sijaan.

import itertools

for row, col in itertools.product(range(3), range(3)):
    print(f"({row},{col})", end=" ")

Kaikkien osajoukkojen testaaminen

Luokaa listan kaikki osajoukot käymällä combinations-funktion avulla läpi jokainen pituus välillä 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)

Kaksoiskappaleiden poistaminen combinations-funktiolla

Käyttäkää combinations-funktiota jokaisen alkioparin vertaamiseen täsmälleen kerran, jolloin päällekkäiset (a,b)- ja (b,a)-vertailut vältetää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}")

Suorituskykynäkökohdat

Kombinatoriset jonot kasvavat erittäin nopeasti. permutations(range(12)) tuottaa 479 miljoonaa tulosta. Käyttäkää aina generaattoreita ja materialisoikaa vain tarvitsemanne tulokset.

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

Pikatarkistus

Mikä itertools-funktio tuottaa kokoelmasta kaikki järjestämättömät parit ilman toistoa?

Kertaus

Käyttäkää product-funktiota karteesisiin tuloihin, permutations-funktiota järjestettyihin muodostelmiin, combinations-funktiota järjestämättömiin osajoukkoihin ja combinations_with_replacement-funktiota, kun alkiot voivat toistua. Käsitelkää kombinatoriset iteraattorit aina laiskasti.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”itertools: kombinatoriikka” ilmainen?

Kyllä – oppitunnin ”itertools: kombinatoriikka” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”itertools: kombinatoriikka”?

Tuottakaa permutaatioita, kombinaatioita ja karteesisia tuloja. Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”itertools: kombinatoriikka”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. itertools: äärettömät ja äärelliset iteraattorit
  2. itertools: kombinatoriikka
  3. functools: partial ja reduce
  4. functools: lru_cache ja cached_property
← Takaisin: Python Academy