Skip to content

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!")