Python Academy · Lektion

itertools: kombinatorik

Generera permutationer, kombinationer och kartesiska produkter.

Lektion 2 av 413 steg

itertools: kombinatorik är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Översikt över kombinatorik

itertools tillhandahåller fyra kombinatoriska funktioner: product, permutations, combinations och 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) beräknar den kartesiska produkten — motsvarande nästlade for-loopar.

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) ger alla ordnade arrangemang med längden 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))  # 6

combinations()

combinations(it, r) ger alla oordnade urval med längden r, utan upprepning. 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))  # 6

combinations_with_replacement()

combinations_with_replacement(it, r) tillåter att ett element förekommer mer än en gång i en kombination.

import itertools

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

Räkna utan materialisering

Använd math.perm, math.comb eller genvägen len() (som fungerar för ändliga resultat) i stället för att generera alla element bara för att räkna dem.

import math

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

Lösenords-/nyckelgenerering

Kombinatoriska iteratorer är användbara för att generera kandidatnycklar eller testfall utan att läsa in allt i minnet.

import itertools, string

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

Rutnätskoordinater med product

Använd product(range(rows), range(cols)) för att iterera över ett tvådimensionellt rutnät utan nästlade loopar.

import itertools

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

Testa alla delmängder

Generera alla delmängder av en lista genom att iterera över combinations för varje längd från 0 till 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)

Ta bort dubbletter med combinations

Använd combinations för att jämföra varje par av element exakt en gång och undvika dubbla jämförelser av (a,b) och (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}")

Prestandaöverväganden

Kombinatoriska följder växer mycket snabbt. permutations(range(12)) producerar 479 miljoner resultat. Använd alltid generatorer och materialisera endast det Ni behöver.

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

Snabbkontroll

Vilken itertools-funktion producerar alla oordnade par utan upprepning från en samling?

Sammanfattning

Använd product för kartesiska produkter, permutations för ordnade arrangemang, combinations för oordnade delmängder och combinations_with_replacement när element får upprepas. Bearbeta alltid kombinatoriska iteratorer fördröjt.

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”itertools: kombinatorik” gratis?

Ja – hela texten till ”itertools: kombinatorik” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”itertools: kombinatorik”?

Generera permutationer, kombinationer och kartesiska produkter. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”itertools: kombinatorik”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. itertools: oändliga och ändliga iteratorer
  2. itertools: kombinatorik
  3. functools: partial och reduce
  4. functools: lru_cache och cached_property
← Tillbaka till Python Academy