Förberedelse inför kodningsintervjuer · Lektion

Comprehensions och inbyggda funktioner

Skriv koncisa lösningar med list/dict/set comprehensions, map, filter, zip, enumerate och sorted med key-funktioner.

Lektion 3 av 413 steg

Comprehensions och inbyggda funktioner är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 3 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 Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

List comprehensions: koncis filtrering

En list comprehension omvandlar en for-loop med append till en tydlig rad: [expr for item in iterable if condition]. Den är lite snabbare och visar att ni behärskar 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]

Kapslade comprehensions för tvådimensionella rutnät

Kapslade comprehensions bygger tvådimensionella rutnät – standardmetoden för att skapa en DP-tabell. Undvik [[0]*C]*R, som delar samma inre lista mellan alla rader. Koden visar 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- och set-comprehensions

Dict- och set-comprehensions använder klamrar: {k: v for ...} för en dict och {expr for ...} för en set. Båda kan filtrera, så ni kan transformera eller ta bort dubbletter på en enda rad.

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

Generatoruttryck: minneseffektiva

Omslut en comprehension med () så får ni en generator som ger ett värde i taget och sparar minne. Skicka den direkt till sum, max eller någon annan funktion över mycket stora 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() och filter(): funktionell stil

map tillämpar en funktion på varje element, medan filter behåller de element som klarar ett test. Båda är lata, så omslut dem med list() för att se resultatet. Comprehensions är ofta tydligare.

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(): para ihop sekvenser

zip parar ihop två sekvenser och stannar vid den kortare – det rena sättet att loopa över två listor samtidigt. Tricket zip(*matrix) transponerar en tvådimensionell lista. 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(): index plus värde

enumerate ger (index, value) medan ni loopar – tydligare än range(len(lst)) och utan risk för off-by-one-fel. Använd alternativet start för att börja räkna från 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. cherry

sorted() med key-funktioner

sorted returnerar en ny sorterad lista och tar en key-funktion för anpassad ordning. Sortera efter längd, efter ett tupelfält eller utan hänsyn till skiftläge. Koden visar sortering med flera nycklar.

# 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() och max() med key

min och max tar också en key, så ni kan hämta elementet med det minsta eller största mappade värdet i ett enda anrop – till exempel det längsta ordet. 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() och all() för kortslutande kontroller

any stannar vid det första elementet som tolkas som sant, medan all stannar vid det första som tolkas som falskt. Båda kortsluter, så tillsammans med en generator testar de villkor snabbt och lat.

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

sum(), abs() och divmod()

Tre hjälpfunktioner för matematik dyker upp överallt: sum, abs och divmod. divmod(a, b) returnerar både kvoten och resten på en gång – perfekt för att plocka fram siffror.

# 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]

Snabbtest

Snabbtest – låt oss se hur väl comprehensions och inbyggda funktioner har landat. En fråga, det här klarar ni. ✅

Sammanfattning av lektionen

Sammanfattning: comprehensions omvandlar loopar till enradingar, inbyggda funktioner som zip och sorted tar key-funktioner och generatorer sparar minne vid arbete som bara går igenom data en gång.

Gratis att börja

Lär dig Förberedelse inför kodningsintervjuer 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
90
Lektioner
360

Vanliga frågor

Är lektionen ”Comprehensions och inbyggda funktioner” gratis?

Ja – hela texten till ”Comprehensions och inbyggda funktioner” 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 Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad lär jag mig i ”Comprehensions och inbyggda funktioner”?

Skriv koncisa lösningar med list/dict/set comprehensions, map, filter, zip, enumerate och sorted med key-funktioner. Ni övar på Förberedelse inför kodningsintervjuer 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 Förberedelse inför kodningsintervjuer?

Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer 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 3 av 4.

Hur lång tid tar lektionen ”Comprehensions och inbyggda funktioner”?

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 Förberedelse inför kodningsintervjuer-lektionen?

Ja. Varje Förberedelse inför kodningsintervjuer-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. Listor, tupler och slicing
  2. Dictionaries och mängder i Python
  3. Comprehensions och inbyggda funktioner
  4. Funktioner, closures och lambda
← Tillbaka till Förberedelse inför kodningsintervjuer