DSA Interview Prep · Oppitunti

Sanakirjat ja joukot Pythonissa

Tutustukaa dict- ja set-rakenteiden luomiseen, jäsenyyden testaamiseen sekä yleisiin malleihin, kuten frekvenssien laskemiseen collections.Counterilla.

Oppitunti 2/413 vaihetta

Sanakirjat ja joukot Pythonissa on ilmainen DSA Interview Prep-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Pythonin sanakirjat: avain-arvo-säilöt

Pythonin dict yhdistää avaimet arvoihin, ja sen haut, lisäykset ja poistot ovat keskimäärin O(1). Se on two-sum-ratkaisujen, anagrammitarkistusten ja esiintymien laskennan perusta. Koodi näyttää, miten sitä käytetään.

d = {'apple': 3, 'banana': 5}
print(d['apple'])   # 3
d['cherry'] = 7
print(len(d))       # 3
print('banana' in d)  # True
del d['apple']
print(d)            # {'banana': 5, 'cherry': 7}

Turvallinen haku .get()-metodilla

Puuttuvan avaimen lukeminen muodossa d[key] aiheuttaa KeyError-virheen. Käyttäkää sen sijaan muotoa d.get(key, default), joka palauttaa oletusarvon — näin vältätte yllättävät ajonaikaiset virheet.

freq = {}
words = ['the', 'cat', 'sat', 'on', 'the', 'mat']
for w in words:
    freq[w] = freq.get(w, 0) + 1
print(freq)
# {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}

print(freq.get('dog', 0))  # 0  (no KeyError)

defaultdict selkeyttää ryhmittelyä

defaultdict(list) luo automaattisesti tyhjän listan jokaiselle uudelle avaimelle, joten ryhmittelyyn tarvitaan vähemmän toistuvaa peruskoodia. defaultdict(int) aloittaa jokaisen avaimen arvosta 0, mikä helpottaa laskemista.

from collections import defaultdict

groups = defaultdict(list)
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
for w in words:
    key = ''.join(sorted(w))  # canonical anagram key
    groups[key].append(w)

print(list(groups.values()))
# [['eat','tea','ate'], ['tan','nat'], ['bat']]

Counter: nopeat esiintymäkartat

Counter on laskemiseen tarkoitettu dict: antakaa sille mikä tahansa iteroitava olio, niin saatte heti esiintymäkartan. most_common(k) palauttaa k yleisintä alkiota. Koodi näyttää anagrammitarkistuksen.

from collections import Counter

c = Counter('abracadabra')
print(c)           # Counter({'a':5,'b':2,'r':2,'c':1,'d':1})
print(c.most_common(2))  # [('a', 5), ('b', 2)]

# Valid anagram check
def is_anagram(s, t):
    return Counter(s) == Counter(t)

print(is_anagram('anagram', 'nagaram'))  # True

Pythonin setit: järjestämättömät yksikäsitteisten alkioiden kokoelmat

set sisältää yksikäsitteisiä alkioita, ja jäsenyyden tarkistaminen on O(1). Käyttäkää muotoa {1, 2, 3} tai set(iterable) — mutta {} luo dictin, joten tyhjän setin luomiseen on käytettävä muotoa set(). Setit sopivat erinomaisesti duplikaattien löytämiseen.

seen = set()
nums = [1, 2, 3, 2, 1, 4]
duplicates = []
for n in nums:
    if n in seen:          # O(1) check
        duplicates.append(n)
    seen.add(n)
print(duplicates)  # [2, 1]
print(len(seen))   # 4  (unique values)

Set-operaatiot työhaastatteluja varten

Setit tukevat joukko-operaatioita: | on yhdiste, & leikkaus, - erotus ja ^ symmetrinen erotus. Näillä ratkeavat "yhteiset alkiot" -tyyppiset kysymykset yhdellä rivillä.

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

print(a | b)  # {1, 2, 3, 4, 5, 6}  union
print(a & b)  # {3, 4}              intersection
print(a - b)  # {1, 2}              difference
print(a ^ b)  # {1, 2, 5, 6}        symmetric diff

Jäsenyyden tarkistaminen: list vai set

Valitsemanne tietorakenne vaikuttaa nopeuteen. in-operaattorin käyttö listalla on O(n), mutta setillä O(1). Listan muuttaminen setiksi ennen toistuvia hakuja on yleinen tapa nopeuttaa ohjelmaa.

word_list = ['apple', 'banana', 'cherry', 'date']
word_set  = set(word_list)

# O(n) per check
print('banana' in word_list)  # True

# O(1) per check
print('banana' in word_set)   # True

# Practical example: find common elements
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
common = [x for x in a if x in set(b)]
print(common)  # [3, 4, 5]

Dictin läpikäynti: avaimet, arvot ja alkiot

Käykää dict läpi käyttämällä metodeja .keys(), .values() tai .items(). Älkää koskaan poistako avaimia silmukan aikana — kerätkää ne ensin listaan ja poistakaa vasta sen jälkeen. Tutustukaa koodiin.

scores = {'Alice': 90, 'Bob': 75, 'Carol': 88}

for name, score in scores.items():
    print(f'{name}: {score}')

# Find key with max value
best = max(scores, key=scores.get)
print(best)  # Alice

# Safe deletion
to_del = [k for k, v in scores.items() if v < 80]
for k in to_del:
    del scores[k]
print(scores)  # {'Alice': 90, 'Carol': 88}

Frozenset: hashable-setit

frozenset on muuttumaton set, joten sitä voi käyttää dictin avaimena tai säilyttää toisen setin sisällä. Se on kätevä anagrammien ryhmittelyssä kirjainten joukon perusteella, kun järjestyksellä ei ole väliä.

from collections import defaultdict

words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
groups = defaultdict(list)
for w in words:
    key = frozenset(w)  # hashable; 'eat','tea','ate' all share same key
    groups[key].append(w)

print([sorted(g) for g in groups.values()])
# [['ate','eat','tea'], ['nat','tan'], ['bat']]

Dict comprehensionit muunnoksiin

Dict comprehensionit rakentavat kuvauksen yhdellä rivillä: {k: v for ...}. Ne sopivat erinomaisesti dictin kääntämiseen tai parien suodattamiseen. Huomioikaa, että kääntäminen edellyttää arvojen olevan yksikäsitteisiä. Tutustukaa koodiin.

# Invert a dict
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
print(inverted)  # {1:'a', 2:'b', 3:'c'}

# Filter by value
scores = {'Alice': 90, 'Bob': 55, 'Carol': 78}
passing = {k: v for k, v in scores.items() if v >= 60}
print(passing)  # {'Alice': 90, 'Carol': 78}

Pisin peräkkäinen lukujono

Setit ratkaisevat pisimmän peräkkäisen lukujonon etsimisen O(n)-ajassa: lisätkää kaikki luvut setiin ja laskekaa eteenpäin vain jokaisesta luvusta, jonka edeltäjä puuttuu. Järjestämistä ei tarvita.

def longest_consecutive(nums):
    num_set = set(nums)
    best = 0
    for n in num_set:
        if n - 1 not in num_set:  # start of sequence
            cur = n
            streak = 1
            while cur + 1 in num_set:
                cur += 1
                streak += 1
            best = max(best, streak)
    return best

print(longest_consecutive([100,4,200,1,3,2]))  # 4 (1,2,3,4)

Pikatarkistus

Pikatarkistus — katsotaan, kuinka hyvin tämän oppitunnin dict- ja set-ideat jäivät mieleen. Luottakaa tässä vaistoihinne. 🎯

Oppitunnin kertaus

Kertaus: dictit tarjoavat O(1)-haut laskemiseen ja ryhmittelyyn, Counter ja defaultdict vähentävät toistuvaa peruskoodia, ja setit muuttavat O(n)-läpikäynnit O(1)-tarkistuksiksi.

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 ”Sanakirjat ja joukot Pythonissa” ilmainen?

Kyllä – oppitunnin ”Sanakirjat ja joukot Pythonissa” 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 ”Sanakirjat ja joukot Pythonissa”?

Tutustukaa dict- ja set-rakenteiden luomiseen, jäsenyyden testaamiseen sekä yleisiin malleihin, kuten frekvenssien laskemiseen collections.Counterilla. 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 2/4.

Kuinka kauan ”Sanakirjat ja joukot Pythonissa”-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