Set v programiranju Python je neurejen tip podatkov zbirke, ki ga je mogoče ponoviti, spremeniti in nima podvojenih elementov.
Nabor je predstavljen z { } (vrednosti v zavitih oklepajih)
Glavna prednost uporabe kompleta v primerjavi z a seznam , je, da ima visoko optimizirano metodo za preverjanje, ali je določen element v nizu. To temelji na podatkovni strukturi, znani kot zgoščena tabela. Ker nizi niso urejeni, do elementov ne moremo dostopati z indeksi, kot to počnemo na seznamih.
Primer naborov Python
Python3
var> => {> 'Geeks'> ,> 'for'> ,> 'Geeks'> }> type> (var)> |
>
>
Izhod:
set>
Časovna zahtevnost: O(1)
Pomožni prostor: O(1)
Vrsta Casting z metodo Python Set
Za pretvorbo tipa se uporablja metoda Python set().
Python3
kaj je ukaz izvoza v linuxu
# typecasting list to set> myset> => set> ([> 'a'> ,> 'b'> ,> 'c'> ])> print> (myset)> # Adding element to the set> myset.add(> 'd'> )> print> (myset)> |
>
>
Izhod:
Python set je neurejen podatkovni tip, kar pomeni, da ne moremo vedeti, v kakšnem vrstnem redu so shranjeni elementi niza.
{'c', 'b', 'a'} {'d', 'c', 'b', 'a'}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Preverite edinstvenost in nespremenljivost s Python Set
Nabori Python ne morejo imeti podvojene vrednosti in ko je ustvarjen, ne moremo spremeniti njegove vrednosti.
Python3
# Python program to demonstrate that> # a set cannot have duplicate values> # and we cannot change its items> # a set cannot have duplicate values> myset> => {> 'Geeks'> ,> 'for'> ,> 'Geeks'> }> print> (myset)> # values of a set cannot be changed> myset[> 1> ]> => 'Hello'> print> (myset)> |
>
mysql štetje
>
Izhod:
Prva koda pojasnjuje, da nabor ne more imeti podvojene vrednosti. Vsak element v njem je edinstvena vrednost.
Druga koda ustvari napako, ker ne moremo dodeliti ali spremeniti vrednosti, ko je niz ustvarjen. Elemente v kompletu lahko samo dodajamo ali brišemo.
{'Geeks', 'for'} TypeError: 'set' object does not support item assignment>
Heterogeni element z naborom Python
Nabori Python lahko vanj shranijo heterogene elemente, tj. nabor lahko shrani mešanico nizov, celih števil, logičnih itd.
Python3
# Python example demonstrate that a set> # can store heterogeneous elements> myset> => {> 'Geeks'> ,> 'for'> ,> 10> ,> 52.7> ,> True> }> print> (myset)> |
>
>
Izhod:
{True, 10, 'Geeks', 52.7, 'for'}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Python Frozen Sets
Zamrznjeni kompleti v Pythonu so nespremenljivi objekti, ki podpirajo le metode in operatorje, ki ustvarijo rezultat, ne da bi vplivali na zamrznjeni niz ali nize, za katere so uporabljeni. To je mogoče storiti z metodo frozenset() v Pythonu.
Medtem ko je elemente niza mogoče kadar koli spremeniti, elementi zamrznjenega niza po ustvarjanju ostanejo enaki.
Če ni posredovan noben parameter, vrne prazen zamrznjen niz.
Python
# Python program to demonstrate differences> # between normal and frozen set> # Same as {'a', 'b','c'}> normal_set> => set> ([> 'a'> ,> 'b'> ,> 'c'> ])> print> (> 'Normal Set'> )> print> (normal_set)> # A frozen set> frozen_set> => frozenset> ([> 'e'> ,> 'f'> ,> 'g'> ])> print> (> '
Frozen Set'> )> print> (frozen_set)> # Uncommenting below line would cause error as> # we are trying to add element to a frozen set> # frozen_set.add('h')> |
>
>
Izhod:
Normal Set {'a', 'c', 'b'} Frozen Set {'e', 'g', 'f'}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Notranje delovanje Seta
To temelji na podatkovni strukturi, znani kot zgoščena tabela. Če je na istem mestu indeksa prisotnih več vrednosti, je vrednost dodana temu položaju indeksa, da se oblikuje povezan seznam.
V Python Sets so implementirani z uporabo slovarja z navideznimi spremenljivkami, kjer so ključna bitja člani niza z večjo optimizacijo časovne kompleksnosti.
Nastavite implementacijo:

Nabori s številnimi operacijami na eni HashTable:

Metode za nize
Dodajanje elementov v Python Sets
Vstavljanje v komplet poteka preko set.add( ), kjer je ustvarjena ustrezna vrednost zapisa za shranjevanje v zgoščeni tabeli. Enako kot preverjanje predmeta, tj. O(1) v povprečju. Vendar pa lahko v najslabšem primeru postane O(n) .
Python3
# A Python program to> # demonstrate adding elements> # in a set> # Creating a Set> people> => {> 'Jay'> ,> 'Idrish'> ,> 'Archi'> }> print> (> 'People:'> , end> => ' '> )> print> (people)> # This will add Daxit> # in the set> people.add(> 'Daxit'> )> # Adding elements to the> # set using iterator> for> i> in> range> (> 1> ,> 6> ):> > people.add(i)> print> (> '
Set after adding element:'> , end> => ' '> )> print> (people)> |
>
>
Izhod:
People: {'Idrish', 'Archi', 'Jay'} Set after adding element: {1, 2, 3, 4, 5, 'Idrish', 'Archi', 'Jay', 'Daxit'}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Operacija združevanja na naborih Python
Dva niza je mogoče združiti s funkcijo union() ali | operater. Do obeh vrednosti zgoščevalne tabele se dostopa in ju prečka z operacijo spajanja, ki se izvaja na njiju za združevanje elementov, hkrati pa se dvojniki odstranijo. Časovna zapletenost tega je O(len(s1) + len(s2)) kjer sta s1 in s2 dve množici, katerih združitev je treba izvesti.
Python3
# Python Program to> # demonstrate union of> # two sets> people> => {> 'Jay'> ,> 'Idrish'> ,> 'Archil'> }> vampires> => {> 'Karan'> ,> 'Arjun'> }> dracula> => {> 'Deepanshu'> ,> 'Raju'> }> # Union using union()> # function> population> => people.union(vampires)> print> (> 'Union using union() function'> )> print> (population)> # Union using '|'> # operator> population> => people|dracula> print> (> '
Union using '|' operator'> )> print> (population)> |
>
>
Izhod:
Union using union() function {'Karan', 'Idrish', 'Jay', 'Arjun', 'Archil'} Union using '|' operator {'Deepanshu', 'Idrish', 'Jay', 'Raju', 'Archil'}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Operacija križišča na množicah Python
To lahko storite z operatorjem intersection() ali &. Izbrani so skupni elementi. Podobni so iteraciji po seznamih zgoščenih vrednosti in združevanju istih vrednosti v obeh tabelah. Časovna zapletenost tega je O(min(len(s1), len(s2)), kjer sta s1 in s2 dva niza, katerih združitev je treba izvesti.
Python3
string.format
# Python program to> # demonstrate intersection> # of two sets> set1> => set> ()> set2> => set> ()> for> i> in> range> (> 5> ):> > set1.add(i)> for> i> in> range> (> 3> ,> 9> ):> > set2.add(i)> # Intersection using> # intersection() function> set3> => set1.intersection(set2)> print> (> 'Intersection using intersection() function'> )> print> (set3)> # Intersection using> # '&' operator> set3> => set1 & set2> print> (> '
Intersection using '&' operator'> )> print> (set3)> |
>
>
Izhod:
Intersection using intersection() function {3, 4} Intersection using '&' operator {3, 4}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Iskanje razlik množic v Pythonu
Za iskanje razlik med sklopi. Podobno kot iskanje razlik na povezanem seznamu. To se naredi z operatorjem difference() ali –. Časovna zahtevnost iskanja razlike s1 – s2 je O(len(s1))
Python3
znak za niz v Javi
# Python program to> # demonstrate difference> # of two sets> set1> => set> ()> set2> => set> ()> for> i> in> range> (> 5> ):> > set1.add(i)> for> i> in> range> (> 3> ,> 9> ):> > set2.add(i)> # Difference of two sets> # using difference() function> set3> => set1.difference(set2)> print> (> ' Difference of two sets using difference() function'> )> print> (set3)> # Difference of two sets> # using '-' operator> set3> => set1> -> set2> print> (> '
Difference of two sets using '-' operator'> )> print> (set3)> |
>
>
Izhod:
Difference of two sets using difference() function {0, 1, 2} Difference of two sets using '-' operator {0, 1, 2}>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Čiščenje naborov Python
Metoda Set Clear() izprazni celoten niz na mestu.
Python3
# Python program to> # demonstrate clearing> # of set> set1> => {> 1> ,> 2> ,> 3> ,> 4> ,> 5> ,> 6> }> print> (> 'Initial set'> )> print> (set1)> # This method will remove> # all the elements of the set> set1.clear()> print> (> '
Set after using clear() function'> )> print> (set1)> |
>
>
Izhod:
Initial set {1, 2, 3, 4, 5, 6} Set after using clear() function set()>
Časovna zahtevnost: O(n)
Pomožni prostor: O(n)
Vendar pa obstajata dve veliki pasti v kompletih Python:
- Komplet ne vzdržuje elementov v določenem vrstnem redu.
- V nabor Python lahko dodate samo primerke nespremenljivih tipov.
Časovna kompleksnost nizov
Delovanje | Povprečen primer | V najslabšem primeru | opombe |
---|---|---|---|
x v s | O(1) | O(n) | |
Unija s|t | O(len(s)+len(t)) | ||
Križišče s&t | O(min(len(s), len(t)) | O(len(s) * len(t)) | zamenjajte min z max, če t ni niz |
Večkratno križišče s1&s2&..&sn | (n-1)*O(l), kjer je l max(len(s1),..,len(sn)) | ||
Razlika s-t | O(samo(e)) |
Operatorji za množice
Kompleti in zamrznjeni nizi podpirajo naslednje operaterje:
Operaterji | Opombe |
---|---|
ključ v s | pregled zadrževanja |
ključ ni v s | preverjanje nezadrževanja |
s1 == s2 | s1 je enakovreden s2 |
s1 != s2 | s1 ni enakovreden s2 |
s1 <= s2 | s1 je podmnožica s2 |
s1 | s1 je prava podmnožica s2 |
s1>= s2 | s1 je nadnabor s2 |
s1> s2 | s1 je prava nadmnožica s2 |
s1 | s2 | zveza s1 in s2 |
s1 in s2 | presečišče s1 in s2 |
s1 – s2 | nabor elementov v s1, ne pa v s2 |
s1 ˆ s2 | nabor elementov v točno enem od s1 ali s2 |
Nedavni članki o Python Set.