itertools: Kombinatorikk
Generer permutasjoner, kombinasjoner og kartesiske produkter.
itertools: Kombinatorikk er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.
Oversikt over kombinatorikk
itertools tilbyr fire kombinatoriske funksjoner: product, permutations, combinations og 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) beregner det kartesiske produktet — tilsvarende nøstede for-løkker.
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) gir alle ordnede arrangementer med lengde r. Totalt: 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) gir alle uordnede utvalg med lengde r, uten gjentakelser. Totalt: 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) tillater at et element forekommer mer enn én gang i en kombinasjon.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]Telle uten materialisering
Bruk math.perm, math.comb eller snarveien len() (som fungerer for endelige resultater) i stedet for å generere alle elementene bare for å telle dem.
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120Generering av passord og nøkler
Kombinatoriske iteratorer er nyttige for å generere mulige nøkler eller testtilfeller uten å laste alt inn i minnet.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingRutenettkoordinater med product
Bruk product(range(rows), range(cols)) til å iterere over et todimensjonalt rutenett uten nøstede løkker.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")Teste alle delmengder
Generer alle delmengder av en liste ved å iterere over combinations for hver lengde fra 0 til 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)Fjerne duplikater med combinations
Bruk combinations til å sammenligne hvert elementpar nøyaktig én gang, slik at du unngår dupliserte sammenligninger av (a,b) og (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}")Ytelsesbetraktninger
Kombinatoriske sekvenser vokser svært raskt. permutations(range(12)) produserer 479 millioner resultater. Bruk alltid generatorer, og materialiser bare det De trenger.
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 earlyHurtigsjekk
Hvilken itertools-funksjon produserer alle uordnede par (uten gjentakelser) fra en samling?
Oppsummering
Bruk product for kartesiske produkter, permutations for ordnede arrangementer, combinations for uordnede delmengder og combinations_with_replacement når elementer kan gjentas. Behandle alltid kombinatoriske iteratorer lat.
Lær deg Python med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 76
- Leksjoner
- 320
Ofte stilte spørsmål
Er leksjonen «itertools: Kombinatorikk» gratis?
Ja – hele teksten i «itertools: Kombinatorikk» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «itertools: Kombinatorikk»?
Generer permutasjoner, kombinasjoner og kartesiske produkter. Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Python Academy?
Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «itertools: Kombinatorikk»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?
Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- itertools: Uendelige og endelige iteratorer
- itertools: Kombinatorikk
- functools: partial og reduce
- functools: lru_cache og cached_property