I denne vejledning lærer du det grundlæggende i Python-sæt og de forskellige sætmetoder, du kan bruge til at ændre Python-sæt.
Sæt er en af de indbyggede datastrukturer i Python. Når du skal arbejde med en ikke-gentagende samling af elementer, skal du bruge sættet som den gå-til-datastruktur.
I de følgende flere sektioner vil vi gennemgå det grundlæggende i python-sæt og de sætmetoder, du kan bruge til at arbejde med dem. Vi vil derefter lære, hvordan man udfører almindelige sæt-operationer i Python.
Lad os begynde!
Indholdsfortegnelse
Grundlæggende om Python-sæt
I Python er et sæt en uordnet samling af ikke-gentagende elementer. Det betyder, at elementerne i et sæt alle skal være forskellige.
Du kan tilføje og fjerne elementer fra et sæt; derfor er sættet en foranderlig samling. Det kan indeholde elementer af forskellige datatyper. Det skal de enkelte elementer i et sæt dog være hashable.
I Python siges et objekt at være hashbart, hvis dets hashværdi aldrig ændres. De fleste uforanderlige objekter såsom Python-strenge, tupler og ordbøger er hashbare.
Vi lærer mere om oprettelse af sæt. Overvej i øjeblikket følgende to sæt:
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'
Det første sæt indeholder tre tal, en tupel og en streng. Den indstillede initialisering kører uden fejl. Hvorimod det andet sæt indeholder en liste i stedet for en tupel. En liste er en foranderlig samling, den kan ikke hashes, og initialiseringen kaster en TypeError.
📑 Ved at sætte det hele sammen kan vi definere et Python-sæt som en foranderlig samling af distinkte og hashbare elementer.
Sådan opretter du et Python-sæt
Vi starter med at lære, hvordan man opretter et sæt i Python.
#1. Brug af eksplicit initialisering
Du kan oprette et sæt i Python ved at angive elementerne i sættet, adskilt af kommaer (,) og omsluttet af et par krøllede klammeparenteser {}.
py_set1 = {'Python','C','C++','JavaScript'} type(py_set1) # Output set
Hvis du har arbejdet med Python-lister før, ved du det [] initialiserer en tom liste. Selvom et Python-sæt er omsluttet af et par krøllede seler {}, kan du ikke bruge et par {} til at initialisere et sæt. Dette er fordi {} den initialiserer en Python-ordbog og ikke et Python-sæt.
py_set2 = {} type(py_set2) # Output dict
Du kan igen kalde funktionen type() for at bekræfte, at py_set det er en ordbog (dict).
#2. Brug af set()-funktionen
Hvis du gerne vil initialisere et tomt sæt og derefter tilføje elementer til det, kan du gøre det ved at bruge set()-funktionen.
py_set3 = set() type(py_set3) # Output set
#3. Casting af andre iterables i et sæt
En anden måde at oprette sæt på er at caste andre iterables, såsom lister og tuples, i sæt ved hjælp af 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
I ovenstående eksempel indeholder py_list ‘C’ to gange. Men i py_set4 optræder ‘C’ kun én gang, da sættet er en samling af særskilte elementer. Denne teknik til casting i sættet bruges ofte til at fjerne dubletter fra Python-lister.
Sådan tilføjes elementer til et Python-sæt
Lad os starte med at oprette et tomt sæt py_set og arbejde med det i resten af denne øvelse.
py_set = set() len(py_set) # returns the length of a set # Output 0
#1. Brug af .add() metoden
For at tilføje elementer til et sæt, kan du bruge .add() metoden. set.add(element) tilføjer element til sættet.
For klarhedens skyld tilføjer vi elementer til Python-sættet og udskriver sættet ved hvert trin.
▶️ Lad os tilføje strengen ‘Python’ som et element til py_set.
py_set.add('Python') print(py_set) # Output {'Python'}
Dernæst tilføjer vi endnu et element.
py_set.add('C++') print(py_set) # Output {'Python', 'C++'}
Det er vigtigt at forstå, at .add()-metoden kun tilføjer et element til sættet, hvis det ikke allerede er til stede. Hvis sættet allerede indeholder det element, du vil tilføje, har tilføjelsesoperationen ingen effekt.
For at bekræfte dette, lad os prøve at tilføje ‘C++’ til py_set.
py_set.add('C++') print(py_set) # Output {'Python', 'C++'}
Sættet indeholder ‘C++’, så tilføjelsesoperationen har ingen effekt.
▶️ Lad os tilføje et par flere elementer til sættet.
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. Brug af .update()-metoden
Indtil videre har vi set, hvordan man tilføjer elementer til det eksisterende sæt – ét element ad gangen.
Hvad hvis du gerne vil tilføje mere end ét element til en sekvens af elementer?
Du kan gøre det ved at bruge .update()-metoden med syntaksen: set.update(collection) for at tilføje elementer i samlingen til et sæt. Samlingen kan være en liste, tupel, ordbog og så videre.
py_set.update(['Julia','Ruby','Scala','Java']) print(py_set) # Output {'C', 'C++', 'Java', 'JavaScript', 'Julia', 'Python', 'Ruby', 'Rust', 'Scala'}
Denne metode er nyttig, når du vil tilføje en samling af elementer til et sæt uden at oprette et andet objekt i hukommelsen.
Lad os i næste afsnit lære, hvordan man fjerner elementer fra et sæt.
Sådan fjerner du elementer fra et Python-sæt
Lad os overveje følgende sæt (py_set før opdateringsoperationen).
py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'}
#1. Brug af .pop()-metoden
set.pop() fjerner et element tilfældigt fra sættet og returnerer det. Lad os kalde pop-metoden på py_set og se, hvad den returnerer.
py_set.pop() # Output 'Rust'
Denne gang returnerede kaldet til .pop()-metoden strengen ‘Rust’.
Bemærk: Fordi .pop()-metoden returnerer et element tilfældigt, når du kører koden i din ende, kan du lige så godt få et andet element.
Når vi undersøger sættet, er ‘Rust’ ikke længere til stede i sættet.
print(py_set) # Output {'JavaScript', 'Python', 'C++', 'C'}
#2. Brug af metoderne .remove() og discard().
I praksis vil du måske fjerne bestemte elementer fra sættet. For at gøre dette kan du bruge metoderne .remove() og .discard().
set.remove(element) fjerner elementer fra sættet.
py_set.remove('C') print(py_set) # Output {'JavaScript', 'Python', 'C++'}
Hvis vi forsøger at fjerne et element, der ikke findes i sættet, løber vi ind i en 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'
Lad os tage et kig på py_set det igen. Vi har nu tre elementer.
print(py_set) # Output {'JavaScript', 'Python', 'C++'}
Med syntaksen set.discard(element) fjerner .discard()-metoden også elementer fra sættet.
py_set.discard('C++') print(py_set) # Output {'JavaScript', 'Python'}
Den adskiller sig dog fra .remove()-metoden ved, at den ikke rejser en KeyError, når vi forsøger at fjerne et element, der ikke er til stede.
Hvis vi forsøger at fjerne ‘Scala’ (som ikke findes) fra listen ved hjælp af .discard()-metoden, ser vi ingen fejl.
py_set.discard('Scala') #no error! print(py_set) # Output {'JavaScript', 'Python'}
Sådan får du adgang til elementer i et Python-sæt
Indtil videre har vi lært, hvordan man tilføjer og fjerner elementer fra Python-sæt. Vi har dog endnu ikke set, hvordan man får adgang til individuelle elementer i et sæt.
Da et sæt er en uordnet samling, kan det ikke indekseres. Derfor, hvis du forsøger at få adgang til elementerne i et sæt ved hjælp af indekset, vil du løbe ind i en fejl, som vist.
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
Så hvordan får du adgang til elementer i et sæt?
Der er to almindelige måder at gøre dette på:
- Gå gennem sættet og få adgang til hvert element
- Tjek, om et bestemt element er medlem af sættet
▶️ Sløjfe gennem sættet og få adgang til elementer ved hjælp af en for-løkke.
for elt in py_set: print(elt) # Output C++ JavaScript Python Rust C
I praksis vil du måske kontrollere, om et givet element er til stede i sættet ved hjælp af in-operatoren.
Bemærk: element i sæt returnerer True, hvis element er til stede i sæt; ellers returnerer den Falsk.
I dette eksempel indeholder py_set ‘C++’ og indeholder ikke ‘Julia’, og in-operatoren returnerer henholdsvis True og False.
'C++' in py_set # True 'Julia' in py_set # False
Sådan finder du længden af et Python-sæt
Som set tidligere kan du bruge len()-funktionen til at få antallet af elementer til stede i et sæt.
py_set = {'C++', 'JavaScript', 'Python', 'Rust', 'C'} len(py_set) # Output: 5
Sådan rydder du et Python-sæt
For at rydde et sæt ved at fjerne alle elementer, kan du bruge metoden .clear().
Lad os kalde .clear()-metoden på py_set.
py_set.clear()
Hvis du prøver at printe det ud, får du set() – hvilket indikerer at sættet er tomt. Du kan også kalde len()-funktionen for at bekræfte, at længden af sættet er nul.
print(py_set) # set() print(len(py_set)) # 0
Indtil videre har vi lært, hvordan man udfører grundlæggende CRUD-operationer på Python-sæt:
- Opret: Brug set()-funktionen, skriv casting og initialisering
- Læs: Få adgang til sættets elementer ved hjælp af loops og in-operator til medlemskabstest
- Opdater: Tilføj, fjern elementer fra sæt, og opdater sæt
- Slet: Ryd et sæt ved at fjerne alle elementer fra det
Fælles sætoperationer, forklaret med Python-kode
Python-sæt giver os også mulighed for at udføre de grundlæggende sæt-operationer. Vi lærer om dem i dette afsnit.
#1. Union of Sets i Python
I mængdeteori er foreningen af to mængder mængden af alle elementer i mindst en af de to mængder. Hvis der er to sæt, A og B, så indeholder foreningen elementer, der kun er til stede i A, kun i B, og de elementer, der er til stede i både A og B.
For at finde foreningen af sæt, kan du bruge | operator eller .union() metoden med syntaksen: 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}
Set union er en kommutativ operation; så AUB er det samme som BU A. Lad os verificere dette ved at udveksle positionerne for setA og setB i .union() metodekaldet.
setB.union(setA) # Output {1, 2, 3, 4, 5, 6, 7, 8, 9}
#2. Skæring af sæt i Python
En anden fælles sætoperation er denne skæring af to sæt, A og B. Sæt skæringsoperation returnerer et sæt, der indeholder alle de elementer, der er til stede i både A og B.
For at beregne skæringspunktet kan du bruge &-operatoren eller .intersection()-metoden, som forklaret i kodestykket nedenfor.
print(setA & setB) # Output {9} setA.intersection(setB) # Output {9}
I dette eksempel er element 9 til stede i både sætA og sætB; så skæringssættet indeholder kun dette element.
Ligesom sætunionen er det indstillede skæringspunkt også en kommutativ operation.
setB.intersection(setA) # Output {9}
#3. Indstil forskel i Python
Givet vilkårlige to sæt, hjælper union og skæring os med at finde de elementer, der er til stede i henholdsvis begge og mindst et af sættene. På den anden side hjælper sætforskel os med at finde de elementer, der er til stede i det ene sæt, men ikke i det andet.
– sætA.difference(sætB) giver det sæt af elementer, der kun er til stede i sætA og ikke i sætB.
– sætB.difference(sætA) giver det sæt af elementer, der kun er til stede i sætB og ikke i sætA.
print(setA - setB) print(setB - setA) # Output {1, 3, 5, 7} {8, 2, 4, 6}
AB er tydeligvis ikke det samme som BA, så den indstillede forskel er ikke en kommutativ operation.
setA.difference(setB) # {1, 3, 5, 7} setB.difference(setA) # {2, 4, 6, 8}
#4. Symmetrisk sæt forskel i Python
Mens sæt skæringspunkter giver os elementer, der er til stede i begge mængder, returnerer den symmetriske mængdeforskel mængden af elementer, der er til stede i nøjagtig et af mængderne.
Overvej følgende eksempel.
setA = {1,3,5,7,10,12} setB = {2,4,6,8,10,12}
For at beregne det symmetriske differenssæt kan du bruge operatoren ^ eller metoden .symmetric_difference().
print(setA ^ setB) # Output {1, 2, 3, 4, 5, 6, 7, 8}
Elementerne 10 og 12 er til stede i både sæt A og sæt B. Så de er ikke til stede i det symmetriske differenssæt.
setA.symmetric_difference(setB) # Output {1, 2, 3, 4, 5, 6, 7, 8}
Da den symmetriske mængdeforskel-operation samler alle elementer, der optræder i nøjagtig et af de to sæt, er det resulterende sæt det samme uanset den rækkefølge, som elementerne er indsamlet i. Derfor er en symmetrisk mængdeforskel en kommutativ operation.
setB.symmetric_difference(setA) # Output {1, 2, 3, 4, 5, 6, 7, 8}
#5. Undersæt og supersæt i Python
I mængdeteori hjælper delmængder og supersæt med at forstå forholdet mellem to sæt.
Givet to mængder A og B er mængde B en delmængde af mængde A, hvis alle elementer i mængde B også er til stede i mængde A. Og mængde A er supermængden af mængde B.
Overvej eksemplet med to sæt: sprog og sprog_udvidet.
languages = {'Python', 'JavaScript','C','C++'} languages_extended = {'Python', 'JavaScript','C','C++','Rust','Go','Scala'}
I Python kan du bruge metoden .issubset() til at kontrollere, om et givet sæt er en delmængde af et andet sæt.
setA.issubset(setB) returnerer True, hvis sætA er en delmængde af sætB; ellers returnerer den Falsk.
I dette eksempel er sprog en delmængde af languages_extended.
languages.issubset(languages_extended) # Output True
På samme måde kan du bruge metoden .issuperset() til at kontrollere, om et givet sæt er et supersæt af et andet sæt.
sætA.issuperset(sætB) returnerer True, hvis sætA er et supersæt af sætB; ellers returnerer den Falsk.
languages_extended.issuperset(languages) # Output True
Da languages_extended er et supersæt af sprog, returnerer languages_extended.issuperset(languages) True, som det ses ovenfor.
Konklusion
Jeg håber, at denne tutorial hjalp dig med at forstå, hvordan Python-sæt fungerer, sætmetoderne til CRUD-operationer og almindelige sæt-operationer. Som et næste trin kan du prøve at bruge dem i dine Python-projekter.
Du kan tjekke andre dybdegående Python-vejledninger. God læring!