itertools: kombinatorik
Generera permutationer, kombinationer och kartesiska produkter.
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)) # 6combinations()
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)) # 6combinations_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)) # 120Lö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 materialisingRutnä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 earlySnabbkontroll
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.
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
- itertools: oändliga och ändliga iteratorer
- itertools: kombinatorik
- functools: partial och reduce
- functools: lru_cache och cached_property