Forberedelse til kodeinterviews · Lektion

Dictionaries og sets i Python

Udforsk oprettelse af dicts og sets, medlemskabstest og almindelige mønstre som frekvensoptælling med collections.Counter.

Lektion 2 af 413 trin

Dictionaries og sets i Python er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 2 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 Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Python-dictionaries: Nøgle-værdi-lagre

En Python-dict knytter nøgler til værdier med opslag, indsættelse og sletning i gennemsnit på O(1). Den er grundlaget for two-sum, anagramkontrol og frekvensoptælling. Koden viser det.

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}

Sikkert opslag med .get()

Hvis du læser en manglende nøgle med d[key], går programmet ned med en KeyError. Brug d.get(key, default) til at returnere en reserveværdi i stedet – en sikker vane, der undgår uventede kørselsfejl.

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 til renere gruppering

defaultdict(list) opretter automatisk en tom liste for hver ny nøgle, så grupperingsproblemer slipper for overflødig standardkode. defaultdict(int) starter hver nøgle på 0, så optælling bliver enkel.

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: Hurtige frekvenskort

Counter er en dict, der er lavet til optælling: Giv den en hvilken som helst itererbar værdi, og få et frekvenskort med det samme. most_common(k) returnerer de k hyppigste. Koden viser en anagramkontrol.

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

Python-sets: Uordnede samlinger af unikke elementer

Et set indeholder unikke elementer og giver O(1)-kontrol af medlemskab. Brug {1, 2, 3} eller set(iterable) – men {} opretter en dict, så brug set() til et tomt set. Det er fremragende til at finde dubletter.

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-operationer til jobsamtaler

Sets kan mængdeberegninger: | forening, & snit, - differens og ^ symmetrisk differens. De løser spørgsmål om "fælles elementer" på én linje.

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

Medlemskabskontrol: List versus set

Den datastruktur, du vælger, påvirker hastigheden. Kontrol af in i en liste er O(n), mens den i et set er O(1). At konvertere en liste til et set før gentagne opslag er en almindelig hastighedsforbedring.

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]

Gennemløb af dicts: Nøgler, værdier og elementer

Gennemgå en dict med .keys(), .values() eller .items(). Slet aldrig nøgler midt i løkken – saml dem først i en liste, og slet dem derefter. Se koden.

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: Hashbare sets

Et frozenset er et uforanderligt set, så det kan være en dict-nøgle eller ligge i et andet set. Det er praktisk til at gruppere anagrammer efter deres bogstavmængde, når rækkefølgen er ligegyldig.

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-forståelser til transformationer

Dict-forståelser opbygger en afbildning på én linje: {k: v for ...}. De er velegnede til at vende en dict om eller filtrere par. Bemærk: En inversion forudsætter, at værdierne er unikke. Se koden.

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

Længste sammenhængende talfølge

Sets løser problemet med den længste sammenhængende talfølge i O(n): Læg alle tal i et set, og tæl derefter kun op fra hvert tal, hvis forgænger mangler. Der er ikke brug for sortering.

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)

Hurtig kontrol

Hurtig kontrol – se, hvor godt idéerne om dicts og sets fra denne lektion har hængt ved. Stol på din intuition her. 🎯

Opsummering af lektionen

Opsummering: dicts giver O(1)-opslag til optælling og gruppering, Counter og defaultdict reducerer standardkoden, og sets forvandler gennemløb på O(n) til kontroller på O(1).

Gratis at komme i gang

Lær Forberedelse til kodeinterviews 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
90
Lektioner
360

Ofte stillede spørgsmål

Er lektionen “Dictionaries og sets i Python” gratis?

Ja — hele teksten til “Dictionaries og sets i Python” 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 Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Dictionaries og sets i Python”?

Udforsk oprettelse af dicts og sets, medlemskabstest og almindelige mønstre som frekvensoptælling med collections.Counter. Du øver dig i Forberedelse til kodeinterviews 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å Forberedelse til kodeinterviews?

Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews 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 2 af 4.

Hvor lang tid tager lektionen “Dictionaries og sets i Python”?

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 Forberedelse til kodeinterviews-lektion?

Ja. Alle Forberedelse til kodeinterviews-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

  1. Lister, tupler og slicing
  2. Dictionaries og sets i Python
  3. Comprehensions og indbyggede funktioner
  4. Funktioner, closures og lambda
← Tilbage til Forberedelse til kodeinterviews