Python Academy · Lektion

itertools: kombinatorik

Generér permutationer, kombinationer og kartesiske produkter.

Lektion 2 af 413 trin

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

combinations()

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

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

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

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

Hurtigt 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.

Gratis at komme i gang

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

  1. itertools: uendelige og endelige iteratorer
  2. itertools: kombinatorik
  3. functools: partial og reduce
  4. functools: lru_cache og cached_property
← Tilbage til Python Academy