Exercitii cu Structuri de Date
Exercitiul 1: Eliminare Duplicate (Lista)
Problema: Elimina duplicatele pastrand ordinea.
def elimina_duplicate(lista):
vazute = set()
rezultat = []
for elem in lista:
if elem not in vazute:
vazute.add(elem)
rezultat.append(elem)
return rezultat
# Test
print(elimina_duplicate([1, 2, 2, 3, 1, 4]))
# [1, 2, 3, 4]
Exercitiul 2: Frecventa Elementelor
Problema: Numara aparitiile fiecarui element.
def frecventa(lista):
contor = {}
for elem in lista:
contor[elem] = contor.get(elem, 0) + 1
return contor
# Test
print(frecventa(["a", "b", "a", "c", "b", "a"]))
# {'a': 3, 'b': 2, 'c': 1}
Exercitiul 3: Gasire Element Majoritar
Problema: Gaseste elementul care apare mai mult de n/2 ori.
def majoritar(lista):
frecv = {}
for elem in lista:
frecv[elem] = frecv.get(elem, 0) + 1
if frecv[elem] > len(lista) // 2:
return elem
return None
# Test
print(majoritar([1, 1, 2, 1, 3, 1])) # 1
print(majoritar([1, 2, 3])) # None
Exercitiul 4: Rotire Lista
Problema: Roteste lista cu k pozitii la dreapta.
def roteste(lista, k):
if not lista:
return lista
k = k % len(lista) # Handle k > len
return lista[-k:] + lista[:-k]
# Test
print(roteste([1, 2, 3, 4, 5], 2)) # [4, 5, 1, 2, 3]
Exercitiul 5: Merge Dictionare
Problema: Combina doua dictionare, sumand valorile pentru cheile comune.
def merge_dicts(d1, d2):
rezultat = d1.copy()
for k, v in d2.items():
rezultat[k] = rezultat.get(k, 0) + v
return rezultat
# Test
a = {"x": 1, "y": 2}
b = {"y": 3, "z": 4}
print(merge_dicts(a, b))
# {'x': 1, 'y': 5, 'z': 4}
Exercitiul 6: Grupare dupa Proprietate
Problema: Grupeaza cuvintele dupa lungime.
def grupeaza_dupa_lungime(cuvinte):
grupuri = {}
for cuvant in cuvinte:
lungime = len(cuvant)
if lungime not in grupuri:
grupuri[lungime] = []
grupuri[lungime].append(cuvant)
return grupuri
# Test
cuvinte = ["ana", "bob", "alice", "dan", "eve"]
print(grupeaza_dupa_lungime(cuvinte))
# {3: ['ana', 'bob', 'dan', 'eve'], 5: ['alice']}
Exercitiul 7: Intersectie Liste
Problema: Gaseste elementele comune din doua liste.
def intersectie(l1, l2):
return list(set(l1) & set(l2))
# Pastrand ordinea din prima lista:
def intersectie_ordonata(l1, l2):
set2 = set(l2)
return [x for x in l1 if x in set2]
# Test
print(intersectie([1, 2, 3, 4], [3, 4, 5, 6]))
# [3, 4]
Exercitiul 8: Anagrame
Problema: Verifica daca doua cuvinte sunt anagrame.
def sunt_anagrame(s1, s2):
return sorted(s1.lower()) == sorted(s2.lower())
# Test
print(sunt_anagrame("listen", "silent")) # True
print(sunt_anagrame("hello", "world")) # False
Puncte Cheie
- Foloseste
setpentru operatii de unicitate dict.get(key, default)evita KeyError- Comprehensions simplifica transformarile
- Atentie la cazurile limita (liste goale)