Comprehensions og indbyggede funktioner
Skriv korte løsninger med list-, dict- og set-comprehensions samt map, filter, zip, enumerate og sorted med key-funktioner.
Comprehensions og indbyggede funktioner er en gratis DSA Interview Prep-lektion på CoddyKit. Dette er lektion 3 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 DSA Interview Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. DSA Interview Prep-kurset indeholder 4 lektioner i alt.
Listeforståelser: Kortfattet filtrering
En listeforståelse forvandler en for-løkke med append til én ren linje: [expr for item in iterable if condition]. Den er lidt hurtigere og viser, at du behersker Python.
# Traditional loop
squares = []
for n in range(1, 6):
squares.append(n * n)
print(squares) # [1, 4, 9, 16, 25]
# List comprehension
squares = [n * n for n in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# With filter
evens = [n for n in range(10) if n % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]Indlejrede listeforståelser til 2D-gitre
Indlejrede listeforståelser opbygger 2D-gitre – den almindelige måde at oprette en DP-tabel på. Undgå [[0]*C]*R, som deler den samme indre liste mellem alle rækker. Koden viser løsningen.
# WRONG: all rows are the same object!
bad = [[0] * 3] * 3
bad[0][0] = 9
print(bad) # [[9,0,0],[9,0,0],[9,0,0]] oops!
# CORRECT: each row is a separate list
good = [[0] * 3 for _ in range(3)]
good[0][0] = 9
print(good) # [[9,0,0],[0,0,0],[0,0,0]]Dict- og set-forståelser
Dict- og set-forståelser bruger krøllede parenteser: {k: v for ...} til en dict og {expr for ...} til et set. Begge kan filtrere, så du kan transformere eller fjerne dubletter på én linje.
# Dict comprehension: square lookup
sq_map = {n: n**2 for n in range(1, 6)}
print(sq_map) # {1:1, 2:4, 3:9, 4:16, 5:25}
# Set comprehension: unique lengths
words = ['cat', 'dog', 'elephant', 'ant']
unique_lengths = {len(w) for w in words}
print(unique_lengths) # {3, 8} (order varies)Generatorudtryk: Hukommelseseffektive
Sæt en listeforståelse ind i (), så får du en generator, der giver værdier én ad gangen og sparer hukommelse. Giv den direkte til sum, max eller en hvilken som helst funktion over enorme sekvenser.
# List comprehension builds all values at once
total = sum([n**2 for n in range(1_000_000)])
# Generator yields one at a time — lower memory
total = sum(n**2 for n in range(1_000_000))
print(total) # 333332833333500000
# any/all with generators short-circuit early
nums = [4, 6, 8, 3, 10]
has_odd = any(n % 2 == 1 for n in nums)
print(has_odd) # True (stops at 3)map() og filter(): Funktionel stil
map anvender en funktion på hvert element, mens filter beholder dem, der består en kontrol. Begge er dovne, så pak dem ind i list() for at se resultaterne. Listeforståelser er ofte tydeligere.
nums = [1, 2, 3, 4, 5]
# map: apply function to each element
doubled = list(map(lambda n: n * 2, nums))
print(doubled) # [2, 4, 6, 8, 10]
# filter: keep elements passing predicate
evens = list(filter(lambda n: n % 2 == 0, nums))
print(evens) # [2, 4]
# Equivalent comprehensions (often preferred)
doubled = [n * 2 for n in nums]
evens = [n for n in nums if n % 2 == 0]zip(): Sammensætning af sekvenser
zip parrer to sekvenser og stopper ved den korteste – den rene måde at gennemløbe to lister på én gang. Tricket zip(*matrix) transponerer en 2D-liste. Se koden.
keys = ['a', 'b', 'c']
values = [1, 2, 3]
pairs = list(zip(keys, values))
print(pairs) # [('a',1), ('b',2), ('c',3)]
# Build dict from two lists
d = dict(zip(keys, values))
print(d) # {'a':1, 'b':2, 'c':3}
# Transpose a matrix
matrix = [[1,2,3],[4,5,6],[7,8,9]]
transposed = [list(row) for row in zip(*matrix)]
print(transposed) # [[1,4,7],[2,5,8],[3,6,9]]enumerate(): Indeks plus værdi
enumerate giver dig (index, value), mens du gennemløber – det er renere end range(len(lst)) og fri for off-by-one-fejl. Brug start-parameteren til at begynde optællingen ved 1.
fruits = ['apple', 'banana', 'cherry']
# Instead of: for i in range(len(fruits)):
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple / 1 banana / 2 cherry
# Start from 1
for i, fruit in enumerate(fruits, 1):
print(f'{i}. {fruit}')
# 1. apple / 2. banana / 3. cherrysorted() med key-funktioner
sorted returnerer en ny sorteret liste og tager en key-funktion til en tilpasset rækkefølge. Sortér efter længde, et tuple-felt eller uden forskel på store og små bogstaver. Koden viser sortering med flere nøgler.
# Sort by second element of tuple
intervals = [(1,3),(2,1),(0,5)]
print(sorted(intervals, key=lambda x: x[1]))
# [(2,1),(1,3),(0,5)]
# Sort strings case-insensitively
words = ['Banana', 'apple', 'Cherry']
print(sorted(words, key=str.lower))
# ['apple', 'Banana', 'Cherry']
# Sort by multiple keys: first by length, then alphabetically
words = ['fig', 'apple', 'ant', 'kiwi']
print(sorted(words, key=lambda w: (len(w), w)))
# ['ant', 'fig', 'kiwi', 'apple']min() og max() med key
min og max tager også en key, så du kan hente det element, der har den mindste eller største afbildede værdi, med ét kald – for eksempel det længste ord. Se koden.
words = ['banana', 'fig', 'strawberry', 'kiwi']
longest = max(words, key=len)
print(longest) # strawberry
shortest = min(words, key=len)
print(shortest) # fig
# Find interval with earliest end
intervals = [(2,6),(1,3),(4,5)]
earlist_end = min(intervals, key=lambda x: x[1])
print(earlist_end) # (1, 3)any() og all() til kortsluttende kontroller
any stopper ved det første element med sandhedsværdi, mens all stopper ved det første falske element. Begge kortslutter, så de sammen med en generator kontrollerer betingelser hurtigt og dovent.
nums = [2, 4, 6, 7, 8]
all_even = all(n % 2 == 0 for n in nums)
print(all_even) # False (7 is odd)
has_large = any(n > 5 for n in nums)
print(has_large) # True (6 qualifies, stops there)
# Practical: check if sudoku row has no duplicates
row = [1, 2, 3, 4, 5, 6, 7, 8, 9]
valid = all(1 <= n <= 9 for n in row) and len(set(row)) == 9
print(valid) # Truesum(), abs() og divmod()
Tre matematiske hjælpefunktioner dukker op overalt: sum, abs og divmod. divmod(a, b) returnerer både kvotienten og resten på én gang – perfekt til at trække cifre ud.
# sum with generator
print(sum(n**2 for n in range(1, 6))) # 55
# abs for distance problems
print(abs(-7)) # 7
# divmod for digit extraction
num = 1234
digits = []
while num:
num, d = divmod(num, 10)
digits.append(d)
digits.reverse()
print(digits) # [1, 2, 3, 4]Hurtig kontrol
Hurtig kontrol – lad os se, hvordan listeforståelserne og de indbyggede funktioner er faldet på plads. Ét spørgsmål, så er du klar. ✅
Opsummering af lektionen
Opsummering: listeforståelser forvandler løkker til énlinjere, indbyggede funktioner som zip og sorted tager key-funktioner, og generatorer sparer hukommelse ved gennemløb, der kun sker én 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
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Comprehensions og indbyggede funktioner” gratis?
Ja — hele teksten til “Comprehensions og indbyggede funktioner” 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 DSA Interview Prep-kurset, skal du opgradere til CoddyKit PRO. DSA Interview Prep-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Comprehensions og indbyggede funktioner”?
Skriv korte løsninger med list-, dict- og set-comprehensions samt map, filter, zip, enumerate og sorted med key-funktioner. Du øver dig i DSA Interview Prep 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å DSA Interview Prep?
Der kræves ingen tidligere erfaring. DSA Interview Prep 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 3 af 4.
Hvor lang tid tager lektionen “Comprehensions og indbyggede funktioner”?
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 DSA Interview Prep-lektion?
Ja. Alle DSA Interview Prep-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
- Lister, tupler og slicing
- Dictionaries og sets i Python
- Comprehensions og indbyggede funktioner
- Funktioner, closures og lambda