DSA Interview Prep · Oppitunti

Comprehension-rakenteet ja sisäänrakennetut funktiot

Kirjoittakaa tiiviitä ratkaisuja list-, dict- ja set-comprehension-rakenteilla sekä map-, filter-, zip-, enumerate- ja sorted-funktioilla ja key-funktioilla.

Oppitunti 3/413 vaihetta

Comprehension-rakenteet ja sisäänrakennetut funktiot on ilmainen DSA Interview Prep-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu DSA Interview Prep-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. DSA Interview Prep-kurssilla on yhteensä 4 oppituntia.

List comprehensionit: tiivis suodatus

List comprehension muuttaa for-silmukan ja append-kutsun yhdeksi selkeäksi riviksi: [expr for item in iterable if condition]. Se on hieman nopeampi ja osoittaa Pythonin sujuvaa hallintaa.

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

Sisäkkäiset comprehensionit kaksiulotteisiin ruudukkoihin

Sisäkkäiset comprehensionit rakentavat kaksiulotteisia ruudukoita — tämä on tavallinen tapa alustaa DP-taulukko. Välttäkää muotoa [[0]*C]*R, koska se jakaa saman sisälistan kaikkien rivien kesken. Koodi näyttää korjauksen.

# 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- ja set-comprehensionit

Dict- ja set-comprehensionit käyttävät aaltosulkeita: {k: v for ...} dictille ja {expr for ...} setille. Molemmilla voi suodattaa, joten voitte muuntaa tai poistaa duplikaatit yhdellä rivillä.

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

Generaattorilausekkeet: muistitehokas tapa

Kun ympäröitte comprehensionin merkeillä (), saatte generaattorin, joka tuottaa arvot yksi kerrallaan ja säästää muistia. Voitte antaa sen suoraan funktioille sum, max tai muille funktioille, kun käsiteltävänä on valtava sekvenssi.

# 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() ja filter(): funktionaalinen tyyli

map käyttää funktiota jokaiseen alkioon, kun taas filter säilyttää testin läpäisevät alkiot. Molemmat ovat laiskoja, joten tulokset saa näkyviin käärimällä ne muotoon list(). Comprehensionit ovat usein selkeämpiä.

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(): sekvenssien yhdistäminen pareiksi

zip yhdistää kaksi sekvenssiä pareiksi ja päättyy lyhyemmän sekvenssin loppuessa — se on selkeä tapa käydä kaksi listaa läpi samanaikaisesti. Niksi zip(*matrix) transponoi kaksiulotteisen listan. Tutustukaa koodiin.

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(): indeksi ja arvo

enumerate antaa silmukan aikana parin (index, value) — tämä on selkeämpää kuin range(len(lst)) ja ehkäisee off-by-one-virheitä. Käyttäkää start-asetusta, jos haluatte aloittaa laskemisen luvusta 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() ja key-funktiot

sorted palauttaa uuden järjestetyn listan ja hyväksyy key-funktion mukautettua järjestystä varten. Voitte järjestää esimerkiksi pituuden, tuplen kentän tai kirjainkoon huomiotta jättävän vertailun perusteella. Koodi näyttää usean avaimen järjestykset.

# 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() ja max() key-argumentilla

min ja max hyväksyvät myös key-argumentin, joten voitte hakea yhdellä kutsulla alkion, jonka muunnettu arvo on pienin tai suurin — esimerkiksi pisimmän sanan. Tutustukaa koodiin.

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() ja all() oikosulkutarkistuksiin

any pysähtyy ensimmäiseen totuusarvoltaan toteen alkioon, ja all ensimmäiseen epätoteen alkioon. Molemmat käyttävät oikosulkua, joten generaattorin kanssa ne tarkistavat ehdot nopeasti ja laiskasti.

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() ja divmod()

Kolme matemaattista apufunktiota tulee vastaan kaikkialla: sum, abs ja divmod. divmod(a, b) palauttaa sekä osamäärän että jakojäännöksen yhdellä kertaa — täydellinen tapa poimia numeroita.

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

Pikatarkistus

Pikatarkistus — katsotaan, miten comprehensionit ja sisäänrakennetut funktiot jäivät mieleen. Yksi kysymys, ja tämä onnistuu. ✅

Oppitunnin kertaus

Kertaus: comprehensionit muuttavat silmukat yhden rivin ratkaisuiksi, zipin ja sortedin kaltaiset sisäänrakennetut funktiot hyväksyvät key-funktioita, ja generaattorit säästävät muistia yhden läpikäynnin tehtävissä.

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Comprehension-rakenteet ja sisäänrakennetut funktiot” ilmainen?

Kyllä – oppitunnin ”Comprehension-rakenteet ja sisäänrakennetut funktiot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko DSA Interview Prep-kurssin, päivitä CoddyKit PROhon. DSA Interview Prep-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Comprehension-rakenteet ja sisäänrakennetut funktiot”?

Kirjoittakaa tiiviitä ratkaisuja list-, dict- ja set-comprehension-rakenteilla sekä map-, filter-, zip-, enumerate- ja sorted-funktioilla ja key-funktioilla. Harjoittelet DSA Interview Prep-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni DSA Interview Prep-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin DSA Interview Prep-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Comprehension-rakenteet ja sisäänrakennetut funktiot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä DSA Interview Prep-oppitunnilla?

Kyllä. Jokainen DSA Interview Prep-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Listat, monikot ja viipalointi
  2. Sanakirjat ja joukot Pythonissa
  3. Comprehension-rakenteet ja sisäänrakennetut funktiot
  4. Funktiot, sulkeumat ja lambda
← Takaisin: DSA Interview Prep