MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Mulțimi

Mulțimea (set) reprezintă un alt tip de colecție care stochează doar elemente unice. Pentru a defini o mulțime, se folosesc acolade în care sunt enumerate elementele:

users = {"Tom", "Bob", "Alice", "Tom"}
print(users)    # {"Alice", "Bob", "Tom"}

Observați că, deși funcția print a afișat elementul "Tom" o singură dată, deși acesta este prezent de două ori în definiția mulțimii. Acest lucru se datorează faptului că mulțimea conține doar valori unice.

De asemenea, pentru a defini o mulțime poate fi utilizată funcția set(), în care se transmite o listă sau un tuplu de elemente:

people = ["Mike", "Bill", "Ted"]
users = set(people)
print(users)    # {"Mike", "Bill", "Ted"}

Funcția set este convenabilă pentru crearea unei mulțimi goale:

users = set()

Pentru a obține lungimea mulțimii se folosește funcția integrată len():

users = {"Tom", "Bob", "Alice"}
print(len(users))       # 3

Adăugarea elementelor

Pentru adăugarea unui singur element se folosește metoda add():

users = set()
users.add("Sam")
print(users)

Ștergerea elementelor

Pentru ștergerea unui element se folosește metoda remove(), căreia i se transmite elementul de șters. Dar trebuie să ținem cont că, dacă un astfel de element nu se află în mulțime, va fi generată o eroare. De aceea, înainte de ștergere, este recomandat să verificăm existența elementului folosind operatorul in:

users = {"Tom", "Bob", "Alice"}

user = "Tom"
if user in users:
   users.remove(user)
print(users)    # {"Bob", "Alice"}

De asemenea, pentru ștergere poate fi utilizată metoda discard(), care nu va genera excepții în cazul absenței elementului:

users = {"Tom", "Bob", "Alice"}

users.discard("Tim")    # elementul "Tim" lipsește, iar metoda nu face nimic
print(users)    #  {"Tom", "Bob", "Alice"}

users.discard("Tom")    # elementul "Tom" este prezent, iar metoda îl șterge
print(users)    #  {"Bob", "Alice"}

Pentru a șterge toate elementele se folosește metoda clear():

users.clear()

Parcurgerea mulțimii

Pentru a parcurge elementele se poate folosi ciclul for:

users = {"Tom", "Bob", "Alice"}

for user in users:
   print(user)

La parcurgere, fiecare element este plasat în variabila user.

Operații cu mulțimi

Cu ajutorul metodei copy() putem copia conținutul unei mulțimi într-o altă variabilă:

users = {"Tom", "Bob", "Alice"}
students = users.copy()
print(students)     # {"Tom", "Bob", "Alice"}

Unirea mulțimilor

Metoda union() unește două mulțimi și returnează o nouă mulțime:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}

users3 = users.union(users2)
print(users3)   # {"Bob", "Alice", "Sam", "Kate", "Tom"}

În locul metodei union() am putea folosi operația de adunare logică - |:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}

print(users | users2)   # {"Bob", "Alice", "Sam", "Kate", "Tom"}

Intersecția mulțimilor

Intersecția mulțimilor permite obținerea doar a acelor elemente care sunt simultan în ambele mulțimi. Metoda intersection() realizează operația de intersecție a mulțimilor și returnează o nouă mulțime:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}

users3 = users.intersection(users2)
print(users3)   # {"Bob"}

În locul metodei intersection am putea folosi operația de înmulțire logică:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}

print(users & users2)   # {"Bob"}

În acest caz am obține același rezultat.

Modificarea metodei - intersection_update() înlocuiește elementele intersecției în prima mulțime:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}
users.intersection_update(users2)
print(users)   # {"Bob"}

Diferența dintre mulțimi

O altă operație - diferența dintre mulțimi returnează acele elemente care sunt în prima mulțime, dar lipsesc în a doua. Pentru a obține diferența dintre mulțimi putem folosi metoda difference sau operația de scădere:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}

users3 = users.difference(users2)
print(users3)           # {"Tom", "Alice"}
print(users - users2)   # {"Tom", "Alice"}

O varietate specială a diferenței dintre mulțimi - diferența simetrică se realizează cu ajutorul metodei symmetric_difference() sau cu ajutorul operației ^. Aceasta returnează toate elementele ambelor mulțimi, cu excepția celor comune:

users = {"Tom", "Bob", "Alice"}
users2 = {"Sam", "Kate", "Bob"}

users3 = users.symmetric_difference(users2)
print(users3)   # {"Tom", "Alice", "Sam", "Kate"}

users4 = users ^ users2
print(users4)   # {"Tom", "Alice", "Sam", "Kate"}

Relațiile dintre mulțimi

Metoda issubset permite verificarea dacă mulțimea curentă este un submulțimă (adică o parte) a unei alte mulțimi:

users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}

print(users.issubset(superusers))   # True
print(superusers.issubset(users))   # False

Metoda issuperset, dimpotrivă, returnează True dacă mulțimea curentă este un supermulțime (adică conține) pentru o altă mulțime:

users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}

print(users.issuperset(superusers))   # False
print(superusers.issuperset(users))   # True

frozen set

Tipul frozen set reprezintă un tip de mulțimi care nu poate fi modificat. Pentru a-l crea se folosește funcția frozenset:

users = frozenset({"Tom", "Bob", "Alice"})

În funcția frozenset se transmite un set de elemente - listă, tuplu, altă mulțime.

Într-o astfel de mulțime nu putem adăuga elemente noi și nici nu putem șterge elementele existente. Din acest motiv, frozen set acceptă un set limitat de operații:

  • len(s): returnează lungimea mulțimii
  • x in s: returnează True dacă elementul x este prezent în mulțimea s
  • x not in s: returnează True dacă elementul x lipsește în mulțimea s
  • s.issubset(t): returnează True dacă t conține mulțimea s
  • s.issuperset(t): returnează True dacă t este conținută în mulțimea s
  • s.union(t): returnează unirea mulțimilor s și t
  • s.intersection(t): returnează intersecția mulțimilor s și t
  • s.difference(t): returnează diferența dintre mulțimile s și t
  • s.copy(): returnează o copie a mulțimii s
← Lecția anterioară Lecția următoare →