Salt la conținutul principal
Modulul 3 · Lecția 4 din 412/36 în curs~10 min
Lecții din modul (4/4)

Seturi

Un set este o colecție de elemente unice, neordonate. Trei superputeri:

  1. Deduplicare automată: adăugarea aceluiași element de două ori nu are efect.
  2. Testul de membru O(1): x in s este extrem de rapid chiar și cu milioane de elemente (este bazat pe hash, cum ar fi dictele).
  3. Operații de set: unire, intersecție, diferență, diferență simetrică.

Crearea unui set

Python
vuoto = set()           # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

Numai bretele {} creează un dicționar gol, nu un set: pentru un set gol aveți nevoie de set().

Modificarea unui set

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # nessun effetto (già presente)
s.discard(99)    # rimuove se presente, silenzioso altrimenti
s.remove(2)      # rimuove o solleva KeyError

Setați operațiuni

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     unione
a & b    # {3, 4}                  intersezione
a - b    # {1, 2}                  differenza (in a ma non in b)
a ^ b    # {1, 2, 5, 6}            differenza simmetrica (xor)

Există și formulare de metodă (a.union(b), a.intersection(b), …) care în În plus, acceptă orice iterabil, nu numai seturi.

Test de membru

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

Pentru comparație: căutarea cu in în interiorul unui list este O(n) și pe lung listează că este mult mai lent.

Frozen set: versiunea imuabilă

frozenset({1, 2, 3}) este versiunea hashable: poate fi o cheie dict sau o element al altui set.

Setați operațiunile și performanța

Seturile sunt implementate ca tabele hash, ceea ce face testarea apartenenței (x in my_set) extrem de rapidă: rulează în timp constant O(1), spre deosebire de listele în care căutarea durează timp liniar O(n). În plus, acceptă operații algebrice precum unirea (|), intersecția (&) și diferența (-).

Încearcă

Exercițiu#python.m3.l4.e1
Încercări: 0Se încarcă…

Având în vedere lista `nums = [1, 2, 2, 3, 3, 3, 4]`, construiți `unique_items` cu valorile unice (în orice ordine) și apoi calculați `count` ca len(unique_items). Evaluează „număr”.

Se încarcă editorul...
Afișează indiciu

set(nums) elimină duplicatele.

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m3.l4.e2
Încercări: 0Se încarcă…

Având în vedere `a = {1, 2, 3, 4}` și `b = {3, 4, 5, 6}`, calculați intersecția în `articole_comune` și diferența a-b în `numai_a`. Evaluați tuplu `(common_items, only_a)`.

Se încarcă editorul...
Afișează indiciu

& intersecție, - diferență.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m3.l4.e3
Încercări: 0Se încarcă…

Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.

Se încarcă editorul...
Afișează indiciu

Puteți utiliza operatorul & sau metoda set_a.intersection(set_b).

Soluție disponibilă după 3 încercări