03/29/2024

Un ghid complet cu exemple de cod

În acest tutorial, veți învăța elementele de bază ale seturilor Python și diferitele metode de setare pe care le puteți utiliza pentru a modifica seturile Python.

Seturile sunt una dintre structurile de date încorporate în Python. Când trebuie să lucrați cu o colecție de elemente care nu se repetă, veți folosi setul ca structură de date de acces.

În următoarele câteva secțiuni, vom trece peste elementele de bază ale seturilor Python și metodele de setare pe care le puteți folosi pentru a lucra cu acestea. Vom învăța apoi cum să efectuăm operațiuni comune de set în Python.

Sa incepem!

Bazele setului Python

În Python, un set este o colecție neordonată de elemente care nu se repetă. Aceasta înseamnă că elementele dintr-un set ar trebui să fie toate distincte.

Puteți adăuga și elimina elemente dintr-un set; prin urmare, setul este o colecție mutabilă. Poate conține elemente de diferite tipuri de date. Cu toate acestea, elementele individuale dintr-un set ar trebui să fie hashable.

În Python, se spune că un obiect este hashable dacă valoarea lui hash nu se modifică niciodată. Cele mai multe obiecte imuabile, cum ar fi șirurile, tuplurile și dicționarele Python sunt hashabile.

Vom învăța în detaliu despre crearea de seturi. Pentru moment, luați în considerare următoarele două seturi:

py_set = {0,1,2,(2,3,4),'Cool!'}
py_set = {0,1,2,[2,3,4],'Oops!'}

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-40-2d3716c7fe01> in <module>()
----> 1 py_set = {0,1,2,[2,3,4],'Oops!'}

TypeError: unhashable type: 'list'

Primul set conține trei numere, un tuplu și un șir. Inițializarea setată rulează fără eroare. În timp ce al doilea set conține o listă în loc de un tuplu. O listă este o colecție mutabilă, nu poate fi hashing, iar inițializarea aruncă o TypeError.

📑 Punând totul împreună, putem defini un set Python ca o colecție mutabilă de elemente distincte și hashabile.

Cum se creează un set Python

Vom începe prin a învăța cum să creăm un set în Python.

#1. Utilizarea inițializării explicite

Puteți crea un set în Python specificând elementele setului, separate prin virgule (,) și incluse într-o pereche de acolade {}.

py_set1 = {'Python','C','C++','JavaScript'}
type(py_set1)

# Output
set

Dacă ați mai lucrat cu liste Python, știți asta [] inițializează o listă goală. Chiar dacă un set Python este închis într-o pereche de acolade {}, nu puteți folosi o pereche {} pentru a inițializa un set. Acest lucru se datorează faptului că {} inițializează un dicționar Python și nu un set Python.

py_set2 = {}
type(py_set2)

# Output
dict

Puteți apela din nou funcția type() pentru a verifica dacă py_set este un dicționar (dict).

#2. Folosind funcția set().

Dacă doriți să inițializați un set gol și apoi să adăugați elemente la acesta, puteți face acest lucru folosind funcția set().

py_set3 = set()
type(py_set3)

# Output
set

#3. Turnarea altor iterabile într-un set

O altă modalitate de a crea seturi este de a turna alte iterabile, cum ar fi liste și tupluri, în seturi, folosind set(iterable).

py_list = ['Python','C','C++','JavaScript','C']
py_set4 = set(py_list)
print(py_set4)
# {'C++', 'C', 'JavaScript', 'Python'} # repeating element 'C' removed
type(py_set4)
# set

În exemplul de mai sus, py_list conține „C” de două ori. Dar în py_set4, „C” apare o singură dată, deoarece setul este o colecție de elemente distincte. Această tehnică de turnare în set este adesea folosită pentru a elimina duplicatele din listele Python.

  Rularea salariilor pentru afacerea dvs. în creștere este ușoară cu Zoho Payroll

Cum să adăugați elemente la un set Python

Să începem prin a crea un set py_set gol și să lucrăm cu el pentru restul acestui tutorial.

py_set = set()
len(py_set) # returns the length of a set
# Output
0

#1. Folosind metoda .add().

Pentru a adăuga elemente la un set, puteți folosi metoda .add(). set.add(element) adaugă element la set.

Pentru claritate, vom adăuga elemente la setul Python și vom tipări setul la fiecare pas.

▶️ Să adăugăm șirul „Python” ca element la py_set.

py_set.add('Python')
print(py_set)

# Output
{'Python'}

În continuare, vom adăuga un alt element.

py_set.add('C++')
print(py_set)

# Output
{'Python', 'C++'}

Este important să înțelegeți că metoda .add() adaugă un element la set doar dacă acesta nu este deja prezent. Dacă setul conține deja elementul pe care doriți să-l adăugați, operația de adăugare nu are efect.

Pentru a verifica acest lucru, să încercăm să adăugăm „C++” la py_set.

py_set.add('C++')
print(py_set)

# Output
{'Python', 'C++'}

Setul conține „C++”, așa că operația de adăugare nu are niciun efect.

▶️ Să mai adăugăm câteva elemente la set.

py_set.add('C')
print(py_set)
py_set.add('JavaScript')
print(py_set)
py_set.add('Rust')
print(py_set)

# Output
{'Python', 'C++', 'C'}
{'JavaScript', 'Python', 'C++', 'C'}
{'Rust', 'JavaScript', 'Python', 'C++', 'C'}

#2. Folosind metoda .update().

Până acum, am văzut cum să adăugați elemente la setul existent – ​​câte un element.

Ce se întâmplă dacă doriți să adăugați mai mult de un element la o secvență de elemente?

Puteți face acest lucru folosind metoda .update() cu sintaxa: set.update(collection) pentru a adăuga elemente din colecție la un set. Colecția poate fi o listă, tuplu, dicționar și așa mai departe.

py_set.update(['Julia','Ruby','Scala','Java'])
print(py_set)

# Output
{'C', 'C++', 'Java', 'JavaScript', 'Julia', 'Python', 'Ruby', 'Rust', 'Scala'}

Această metodă este utilă atunci când doriți să adăugați o colecție de elemente la un set fără a crea un alt obiect în memorie.

În secțiunea următoare, să învățăm cum să eliminați elemente dintr-un set.

Cum să eliminați elemente dintr-un set Python

Să luăm în considerare următorul set (py_set înainte de operația de actualizare).

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}

#1. Folosind metoda .pop().

set.pop() elimină un element aleatoriu din set și îl returnează. Să apelăm metoda pop pe py_set și să vedem ce returnează.

py_set.pop()

# Output
'Rust'

De data aceasta, apelul la metoda .pop() a returnat șirul „Rugină”.

Notă: Deoarece metoda .pop() returnează un element la întâmplare, atunci când rulați codul la final, ați putea la fel de bine să obțineți un alt element.

Când examinăm setul, „Rugina” nu mai este prezent în set.

print(py_set)

# Output
{'JavaScript', 'Python', 'C++', 'C'}

#2. Folosind metodele .remove() și discard().

În practică, poate doriți să eliminați anumite elemente din set. Pentru a face acest lucru, puteți utiliza metodele .remove() și .discard().

set.remove(element) elimină elemente din set.

py_set.remove('C')
print(py_set)

# Output
{'JavaScript', 'Python', 'C++'}

Dacă încercăm să eliminăm un element care nu este prezent în set, vom întâlni o KeyError.

py_set.remove('Scala')

# Output
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-58-a1abab3a8892> in <module>()
----> 1 py_set.remove('Scala')

KeyError: 'Scala'

Să aruncăm o privire la py_set it din nou. Acum avem trei elemente.

print(py_set)

# Output
{'JavaScript', 'Python', 'C++'}

Cu sintaxa set.discard(element), metoda .discard() elimină și elemente din set.

py_set.discard('C++')
print(py_set)

# Output
{'JavaScript', 'Python'}

Cu toate acestea, diferă de metoda .remove() prin faptul că nu generează o KeyError atunci când încercăm să eliminăm un element care nu este prezent.

  Cum să utilizați reacțiile în „Animal Crossing: New Horizons” de pe smartphone

Dacă încercăm să eliminăm „Scala” (care nu există) din listă folosind metoda .discard(), nu vedem nicio eroare.

py_set.discard('Scala') #no error!
print(py_set)

# Output
{'JavaScript', 'Python'}

Cum să accesați elementele unui set Python

Până acum, am învățat cum să adăugăm și să eliminăm elemente din seturile Python. Cu toate acestea, nu am văzut încă cum să accesăm elementele individuale dintr-un set.

Întrucât un set este o colecție neordonată, nu este indexabil. Prin urmare, dacă încercați să accesați elementele unui set folosind indexul, veți întâlni o eroare, așa cum se arată.

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}

print(py_set[0])

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-0329274f4580> in <module>()
----> 1 print(py_set[0])

TypeError: 'set' object is not subscriptable

Deci, cum accesați elementele dintr-un set?

Există două moduri comune de a face acest lucru:

  • Parcurgeți setul și accesați fiecare element
  • Verificați dacă un anumit element este membru al mulțimii

▶️ Circulați prin setul și accesați elementele folosind o buclă for.

for elt in py_set:
  print(elt)

# Output
C++
JavaScript
Python
Rust
C

În practică, poate doriți să verificați dacă un anumit element este prezent în set folosind operatorul in.

Notă: elementul din set returnează adevărat dacă elementul este prezent în set; altfel se întoarce False.

În acest exemplu, py_set conține „C++” și nu conține „Julia”, iar operatorul in returnează True și, respectiv, False.

'C++' in py_set
# True
'Julia' in py_set
# False

Cum să găsiți lungimea unui set Python

După cum am văzut mai devreme, puteți folosi funcția len() pentru a obține numărul de elemente prezente într-un set.

py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}
len(py_set)

# Output: 5

Cum să ștergeți un set Python

Pentru a șterge un set prin eliminarea tuturor elementelor, puteți folosi metoda .clear().

Să apelăm metoda .clear() pe py_set.

py_set.clear()

Dacă încercați să-l imprimați, veți obține set() – indicând faptul că setul este gol. De asemenea, puteți apela funcția len() pentru a verifica dacă lungimea setului este zero.

print(py_set)
# set()
print(len(py_set))
# 0

Până acum, am învățat cum să efectuăm operațiuni CRUD de bază pe seturi Python:

  • Creare: Folosind funcția set(), tip casting și inițializare
  • Citiți: Accesați elementele setului folosind bucle și operator pentru testarea apartenenței
  • Actualizare: adăugați, eliminați elemente din seturi și actualizați seturi
  • Ștergere: ștergeți un set eliminând toate elementele din acesta

Operații comune de set, explicate cu codul Python

Seturile Python ne permit, de asemenea, să efectuăm operațiunile de bază ale seturilor. Vom afla despre ele în această secțiune.

#1. Unirea seturi în Python

În teoria mulțimilor, unirea a două mulțimi este mulțimea tuturor elementelor din cel puțin una dintre cele două mulțimi. Dacă există două mulțimi, A și B, atunci uniunea conține elemente care sunt prezente numai în A, numai în B și elementele prezente atât în ​​A cât și în B.

Pentru a găsi uniunea de seturi, puteți folosi | operator sau .union() metoda cu sintaxa: setA.union(setB).

setA = {1,3,5,7,9}
setB = {2,4,6,8,9}

print(setA | setB)
# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

setA.union(setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

Unirea seturilor este o operație comutativă; deci AUB este la fel cu BU A. Să verificăm acest lucru prin interschimbarea pozițiilor setA și setB în apelul metodei .union().

setB.union(setA)

# Output
{1, 2, 3, 4, 5, 6, 7, 8, 9}

#2. Intersecția seturilor în Python

O altă operație de set comun este această intersecție a două mulțimi, A și B. Operația de intersecție set returnează o mulțime care conține toate elementele prezente atât în ​​A cât și în B.

  Cum să schimbați fonturile în WordPress și să îmbunătățiți designul site-ului dvs. web

Pentru a calcula intersecția, puteți utiliza operatorul & sau metoda .intersection(), așa cum este explicat în fragmentul de cod de mai jos.

print(setA & setB)

# Output
{9}

setA.intersection(setB)

# Output
{9}

În acest exemplu, elementul 9 este prezent atât în ​​setA cât și în setB; deci multimea de intersectie contine doar acest element.

Ca și uniunea mulțimii, intersecția mulțimii este, de asemenea, o operație comutativă.

setB.intersection(setA)

# Output
{9}

#3. Setați diferența în Python

Având în vedere oricare două mulțimi, uniunea și intersecția ne ajută să găsim elementele prezente în ambele și, respectiv, în cel puțin una dintre mulțimi. Pe de altă parte, diferența de set ne ajută să găsim elementele prezente într-un set, dar nu și în celălalt.

– setA.difference(setB) dă setul de elemente care sunt prezente numai în setA și nu în setB.

– setB.difference(setA) dă setul de elemente care sunt prezente numai în setB și nu în setA.

print(setA - setB)

print(setB - setA)

# Output
{1, 3, 5, 7}
{8, 2, 4, 6}

În mod clar, AB nu este același cu BA, deci diferența de set nu este o operație comutativă.

setA.difference(setB)
# {1, 3, 5, 7}

setB.difference(setA)
# {2, 4, 6, 8}

#4. Diferența de set simetric în Python

În timp ce intersecția mulțimilor ne oferă elemente prezente în ambele mulțimi, diferența de mulțime simetrică returnează setul de elemente prezent în exact una dintre mulțimi.

Luați în considerare următorul exemplu.

setA = {1,3,5,7,10,12}
setB = {2,4,6,8,10,12}

Pentru a calcula setul de diferențe simetrice, puteți utiliza operatorul ^ sau metoda .symmetric_difference().

print(setA ^ setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

Elementele 10 și 12 sunt prezente atât în ​​setul A cât și în setul B. Deci ele nu sunt prezente în setul de diferențe simetrice.

setA.symmetric_difference(setB)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

Deoarece operația de diferență a mulțimii simetrice colectează toate elementele care apar în exact una dintre cele două mulțimi, mulțimea rezultată este aceeași indiferent de ordinea în care sunt colectate elementele. Prin urmare, o diferență de set simetrică este o operație comutativă.

setB.symmetric_difference(setA)

# Output
{1, 2, 3, 4, 5, 6, 7, 8}

#5. Subseturi și superseturi în Python

În teoria mulțimilor, submulțimile și supramulțimile ajută la înțelegerea relației dintre două mulțimi.

Având în vedere două mulțimi A și B, mulțimea B este o submulțime a mulțimii A dacă toate elementele din mulțimea B sunt prezente și în mulțimea A. Și mulțimea A este supermulțimea mulțimii B.

Luați în considerare exemplul a două seturi: languages ​​și languages_extended.

languages = {'Python', 'JavaScript','C','C++'}
languages_extended = {'Python', 'JavaScript','C','C++','Rust','Go','Scala'}

În Python, puteți utiliza metoda .issubset() pentru a verifica dacă un anumit set este un subset al altui set.

setA.issubset(setB) returnează True dacă setA este un subset al setB; altfel, returnează False.

În acest exemplu, languages ​​este un subset de languages_extended.

languages.issubset(languages_extended)
# Output
True

În mod similar, puteți utiliza metoda .issuperset() pentru a verifica dacă un anumit set este un superset al altui set.

setA.issuperset(setB) returnează True dacă setA este un superset al setB; altfel, returnează False.

languages_extended.issuperset(languages)
# Output
True

Deoarece languages_extended este un superset de limbi, languages_extended.issuperset(languages) returnează True, așa cum s-a văzut mai sus.

Concluzie

Sper că acest tutorial v-a ajutat să înțelegeți funcționarea seturilor Python, metodele de setare pentru operațiunile CRUD și operațiunile de set obișnuite. Ca pas următor, puteți încerca să le utilizați în proiectele dvs. Python.

Puteți consulta și alte ghiduri Python aprofundate. Învățare fericită!