Pe scurt
Un set Python păstrează valori distincte și oferă teste de apartenență și operații de mulțimi. Din lista [2,1,2], set([2,1,2]) conține 1 și 2, fiecare o singură dată. Mulțimea nu promite o ordine stabilă a afișării; dacă ordinea contează, sortează elementele explicit.
În detaliu
Clasa set din Python păstrează valori distincte, fără o ordine garantată, și oferă testul de apartenență în timp aproape constant. O mulțime se construiește cu acolade, {1, 2, 3}, sau cu set(...) dintr-o listă ori dintr-un șir; mulțimea goală se scrie set(), pentru că {} creează un dicționar gol. Elementele trebuie să fie imuabile (numere, texte, tupluri), deci o listă nu poate fi element al unei mulțimi. Operațiile de mulțimi au operatori și metode: reuniunea a | b, intersecția a & b, diferența a - b și diferența simetrică a ^ b, care conține elementele aflate în exact una dintre mulțimi. Operatorul <= testează incluziunea, iar x in a apartenența. Metoda a.add(x) adaugă un element (dacă există deja, nu se întâmplă nimic), a.discard(x) șterge un element fără eroare dacă lipsește, a.remove(x) ridică KeyError dacă elementul lipsește, iar a.update(b) adaugă toate elementele lui b. Pentru o ieșire previzibilă se folosește sorted, care întoarce o listă ordonată.
Exemplul 1 — operațiile de bază.
a = {1, 2, 3}
b = {2, 4}
print(sorted(a & b), sorted(a | b), sorted(a - b), sorted(a ^ b))
Intersecția conține doar 2, reuniunea conține 1, 2, 3, 4, diferența a - b conține 1 și 3, iar diferența simetrică conține 1, 3 și 4. Se afișează [2] [1, 2, 3, 4] [1, 3] [1, 3, 4]. Funcția sorted este folosită pentru ca ieșirea să fie ordonată; rezultatul ei este o listă, nu o mulțime.
Exemplul 2 — eliminarea duplicatelor. Din lista [3, 1, 3, 2, 1, 3], set(...) păstrează fiecare valoare o singură dată: {1, 2, 3}. Numărul valorilor distincte este len(set(lista)), adică 3. Dacă elementele trebuie să rămână în ordinea inițială a primei apariții, nu se poate folosi direct mulțimea: se parcurge lista și se adaugă la rezultat numai elementele care nu sunt încă în mulțimea celor văzute.
Exemplul 3 — modificarea unei mulțimi. Pentru u = {1, 2}, apelurile u.add(3) și u.add(2) lasă mulțimea {1, 2, 3}: a doua adăugare nu are efect. u.discard(9) nu face nimic, deoarece 9 lipsește, dar u.remove(9) ridică eroarea KeyError: 9. Expresia a | {5} produce o mulțime nouă și lasă a neschimbată, pe când a.update({5}) modifică a. Testul {1, 2} <= a este adevărat dacă toate elementele mulțimii din stânga aparțin lui a.
Exemplul 4 — apartenență și parcurgere. Testul x in a pe o mulțime nu parcurge elementele una câte una, spre deosebire de același test pe o listă; de aceea, când un șir de valori trebuie interogat des, se convertește într-o mulțime. Mulțimile pot fi parcurse cu for x in a, dar ordinea nu este cea a inserării. Două mulțimi sunt egale dacă au aceleași elemente, indiferent cum au fost construite: {1, 2} == {2, 1, 2} este adevărat. Numărul elementelor comune a două liste se află prin len(set(l1) & set(l2)): pentru [1, 2, 2, 5] și [2, 5, 7] rezultatul este 2.
Exemplul 5 — elemente care apar într-o singură listă. Pentru a = [1, 2, 3, 4] și b = [3, 4, 5], expresia sorted(set(a) ^ set(b)) dă [1, 2, 5], iar sorted(set(a) - set(b)) dă [1, 2]: diferența simetrică păstrează elementele din exact una dintre liste, pe când diferența păstrează numai pe cele din a. Încercarea de a crea {[1, 2], [3]} ridică TypeError: unhashable type: 'list', deoarece lista este modificabilă; tuplurile {(1, 2), (3,)} sunt acceptate, pentru că sunt imuabile. Elementele comune a trei liste se obțin prin intersecții succesive, set(a) & set(b) & set(c), iar rezultatul poate fi gol, caz în care se afișează set().
Greșeli frecvente
- Greșit:
{}creează o mulțime goală.Corect: creează un dicționar gol; mulțimea goală esteset(). - Greșit: într-un
set, elementele rămân în ordinea în care au fost adăugate.Corect: ordinea nu este garantată; pentru ieșire previzibilă se foloseștesorted. - Greșit:
a | {5}modifică mulțimeaa.Corect: construiește o mulțime nouă;updatemodifică mulțimea existentă.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 4370/2026, anexa 2, p. 20; rocnee.eu
Documente consultate
- Programele școlare noi de informatică pentru clasele X–XII (OMEC 4370/2026, MO 591 bis/20.07.2026), CNCE, anexa 2, p. 20–21; rocnee.eu
- Python Software Foundation, Python Tutorial, capitolul 5.4, docs.python.org/3/tutorial/datastructures.html#sets
Desene: Redactare proprie (desen original), conform OMEC 4370/2026, Informatică X; rocnee.eu
