Mulțimi (Set) în Python
Ce este o Mulțime?
Mulțimea este o colecție neordonată de elemente unice, mutabilă.
numere = {1, 2, 3, 4, 5}
fructe = {"mar", "para", "banana"}
goala = set() # NU {}! Asta e dicționar gol!
Caracteristici
- Fără duplicate:
s = {1, 2, 2, 3, 3, 3}
print(s) # {1, 2, 3}
- Neordonată - nu suportă indexare:
s = {1, 2, 3}
# s[0] # TypeError!
- Elemente hashable:
s = {1, "text", (1, 2)} # OK
# s = {[1, 2]} # TypeError - liste nu sunt hashable
Operații cu Mulțimi
Adăugare și eliminare
s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
s.add(2) # {1, 2, 3, 4} - 2 există deja
s.remove(2) # {1, 3, 4} - KeyError dacă nu există
s.discard(10) # Nu face nimic dacă nu există
elem = s.pop() # Elimină un element aleatoriu
s.clear() # set()
Operații matematice
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# Reuniune
a | b # {1, 2, 3, 4, 5, 6}
a.union(b) # {1, 2, 3, 4, 5, 6}
# Intersecție
a & b # {3, 4}
a.intersection(b) # {3, 4}
# Diferență
a - b # {1, 2}
a.difference(b) # {1, 2}
# Diferență simetrică
a ^ b # {1, 2, 5, 6}
a.symmetric_difference(b)
Comparații
a = {1, 2, 3}
b = {1, 2, 3, 4, 5}
c = {1, 2, 3}
a <= b # True - a este submulțime a lui b
a < b # True - a este submulțime proprie
a == c # True - mulțimi egale
a.issubset(b) # True
b.issuperset(a) # True
a.isdisjoint({4, 5}) # True - fără elemente comune
Conversii
# Listă la mulțime (elimină duplicate)
lista = [1, 2, 2, 3, 3, 3]
multime = set(lista) # {1, 2, 3}
# Mulțime la listă
lista = list(multime) # [1, 2, 3] (ordine poate varia)
# String la mulțime
caractere = set("hello") # {'h', 'e', 'l', 'o'}
Frozen Set (Mulțime Imutabilă)
fs = frozenset([1, 2, 3])
# fs.add(4) # AttributeError - imutabil!
# Poate fi cheie de dicționar
d = {fs: "valoare"}
Cazuri de Utilizare
Eliminare duplicate
numere = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unice = list(set(numere))
Verificare apartenență rapidă
valide = {"admin", "user", "guest"}
rol = "admin"
if rol in valide: # O(1) vs O(n) pentru liste
print("Rol valid")
Găsire elemente comune
lista1 = [1, 2, 3, 4, 5]
lista2 = [4, 5, 6, 7, 8]
comune = set(lista1) & set(lista2) # {4, 5}
De Reținut
Mulțimile nu permit duplicate și oferă verificare de apartenență în O(1). Folosește
set()pentru mulțime goală, nu{}(care creează dicționar).
Întrebări de Verificare
- Ce returnează
len({1, 2, 2, 3, 3, 3})? - Cum creezi o mulțime goală?
- Care este diferența dintre
remove()șidiscard()? - Ce tip de elemente pot fi în mulțime?