itertools: kombinatorik
Generér permutationer, kombinationer og kartesiske produkter.
itertools: kombinatorik er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
Oversigt over kombinatorik
itertools tilbyder fire kombinatoriske funktioner: 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 produkt – svarende til indlejrede 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) returnerer alle ordnede arrangementer med længden r. I alt: 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) returnerer alle uordnede udvælgelser med længden r uden gentagelse. I alt: 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) tillader, at et element optræder mere end én gang i en kombination.
import itertools
result = list(itertools.combinations_with_replacement("AB", 2))
print(result)
# [(A,A),(A,B),(B,B)]Optælling uden materialisering
Brug math.perm, math.comb eller genvejen len() (som virker for endelige resultater) i stedet for at generere alle elementer kun for at tælle dem.
import math
print(math.perm(10, 3)) # 720
print(math.comb(10, 3)) # 120Generering af adgangskoder og nøgler
Kombinatoriske iteratorer er nyttige til at generere mulige nøgler eller testtilfælde uden at indlæse alt i hukommelsen.
import itertools, string
chars = string.ascii_lowercase
# All 2-char lowercase combos:
for combo in itertools.combinations(chars, 2):
pass # process without materialisingGitterkoordinater med product
Brug product(range(rows), range(cols)) til at gennemløbe et todimensionalt gitter uden indlejrede løkker.
import itertools
for row, col in itertools.product(range(3), range(3)):
print(f"({row},{col})", end=" ")Test af alle delmængder
Generér alle delmængder af en liste ved at gennemløbe combinations for hver længde 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)Fjern dubletter med combinations
Brug combinations til at sammenligne hvert par af elementer præcis én gang, så dublerede sammenligninger af (a,b) og (b,a) undgås.
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}")Ydelsesovervejelser
Kombinatoriske talfølger vokser meget hurtigt. permutations(range(12)) genererer 479 millioner resultater. Brug altid generatorer, og materialisér kun det, du har brug for.
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 earlyHurtigt tjek
Hvilken itertools-funktion genererer alle uordnede par uden gentagelse fra en samling?
Opsummering
Brug product til kartesiske produkter, permutations til ordnede arrangementer, combinations til uordnede delmængder og combinations_with_replacement, når elementer må gentages. Behandl altid kombinatoriske iteratorer behovsstyret.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “itertools: kombinatorik” gratis?
Ja — hele teksten til “itertools: kombinatorik” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “itertools: kombinatorik”?
Generér permutationer, kombinationer og kartesiske produkter. Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Python Academy?
Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “itertools: kombinatorik”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Python Academy-lektion?
Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- itertools: uendelige og endelige iteratorer
- itertools: kombinatorik
- functools: partial og reduce
- functools: lru_cache og cached_property