Mulțimi (Sets)
Ce sunt mulțimile?
O mulțime este o colecție neordonată de elemente unice. Spre deosebire de liste:
- Nu permite duplicate - dacă adaugi același element de mai multe ori, apare doar o dată
- Nu păstrează ordinea elementelor
- Elementele trebuie să fie immutable (care nu pot fi modificate): numere, stringuri, tupluri
Când sunt utile mulțimile?
- Eliminarea duplicatelor dintr-o colecție
- Verificarea apartenenței - mult mai rapidă decât la liste: O(1) vs O(n)
- Operații matematice pe mulțimi: reuniune, intersecție, diferență
- Filtrarea elementelor unice
Crearea mulțimilor
# Mulțime vidă
multime_vida = set()
print(multime_vida) # set()
# Mulțime cu elemente
numere = {1, 2, 3, 4, 5}
fructe = {"măr", "pară", "banană"}
# Din listă (elimină automat duplicatele)
lista = [1, 2, 2, 3, 3, 3, 4]
multime = set(lista)
print(multime) # {1, 2, 3, 4}
Atenție: {} creează un dicționar gol, nu o mulțime! Pentru mulțime vidă folosești set().
Operații de bază
multime = {1, 2, 3}
# Adăugare element
multime.add(4)
print(multime) # {1, 2, 3, 4}
# Adăugare element duplicat - nu are efect
multime.add(2)
print(multime) # {1, 2, 3, 4}
# Ștergere element
multime.remove(3) # Eroare dacă elementul nu există
multime.discard(10) # Nu dă eroare dacă elementul nu există
# Cardinalul (numărul de elemente)
print(len(multime)) # 3
# Verificare apartenență (foarte rapidă!)
print(2 in multime) # True
print(10 in multime) # False
Operații pe mulțimi
Exact ca la matematică:
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
# Reuniune (toate elementele din ambele mulțimi)
print(A | B) # {1, 2, 3, 4, 5, 6}
print(A.union(B)) # {1, 2, 3, 4, 5, 6}
# Intersecție (elementele comune)
print(A & B) # {3, 4}
print(A.intersection(B)) # {3, 4}
# Diferență (elemente din A care nu sunt în B)
print(A - B) # {1, 2}
print(A.difference(B)) # {1, 2}
# Diferență simetrică (elemente care sunt doar într-una din mulțimi)
print(A ^ B) # {1, 2, 5, 6}
print(A.symmetric_difference(B)) # {1, 2, 5, 6}
Verificări între mulțimi
A = {1, 2, 3}
B = {1, 2, 3, 4, 5}
C = {1, 2, 3}
# Submulțime
print(A <= B) # True (A este submulțime a lui B)
print(A.issubset(B)) # True
# Supramulțime
print(B >= A) # True (B este supramulțime a lui A)
print(B.issuperset(A)) # True
# Egalitate
print(A == C) # True
# Mulțimi disjuncte (fără elemente comune)
D = {10, 20}
print(A.isdisjoint(D)) # True
Metode utile pentru mulțimi
| Metodă | Descriere |
|---|---|
add(x) |
Adaugă elementul x |
remove(x) |
Șterge x (eroare dacă nu există) |
discard(x) |
Șterge x (fără eroare dacă nu există) |
pop() |
Șterge și returnează un element arbitrar |
clear() |
Golește mulțimea |
copy() |
Returnează o copie |
union(other) |
Reuniune |
intersection(other) |
Intersecție |
difference(other) |
Diferență |
Aplicații practice cu mulțimi
Eliminarea duplicatelor
numere = [1, 5, 2, 1, 9, 1, 5, 7]
numere_unice = list(set(numere))
print(numere_unice) # [1, 2, 5, 7, 9] (ordinea poate varia)
Găsirea elementelor comune
lista1 = [1, 2, 3, 4, 5]
lista2 = [4, 5, 6, 7, 8]
comune = set(lista1) & set(lista2)
print(comune) # {4, 5}
Verificare rapidă dacă un element există
cuvinte_valide = {"python", "java", "c++", "javascript"}
cuvant = input("Introdu un limbaj: ").lower()
if cuvant in cuvinte_valide:
print("Limbaj valid!")