V tej vadnici boste izvedeli vse o naborih Python; kako so ustvarjeni, dodajanje ali odstranjevanje elementov iz njih in vse operacije, ki se izvajajo na nizih v Pythonu.
Video: Kompleti v Pythonu
Komplet je neurejena zbirka predmetov. Vsak element nabora je unikaten (brez dvojnikov) in mora biti nespremenljiv (ni ga mogoče spremeniti).
Vendar je sam sklop spremenljiv. Iz njega lahko dodamo ali odstranimo elemente.
Nabore lahko uporabimo tudi za izvajanje matematičnih nizov, kot so združitev, presečišče, simetrična razlika itd.
Ustvarjanje naborov Python
Komplet ustvari tako, da vse predmete (elemente) postavi v zavite oklepaje ()
, ločene z vejico ali z uporabo vgrajene set()
funkcije
Lahko vsebuje poljubno število elementov in so lahko različnih vrst (celo število, float, tuple, niz itd.). Toda niz ne more imeti za svoje elemente spremenljivih elementov, kot so seznami, nizi ali slovarji.
# Different types of sets in Python # set of integers my_set = (1, 2, 3) print(my_set) # set of mixed datatypes my_set = (1.0, "Hello", (1, 2, 3)) print(my_set)
Izhod
(1, 2, 3) (1.0, (1, 2, 3), »Pozdravljeni«)
Preizkusite tudi naslednje primere.
# set cannot have duplicates # Output: (1, 2, 3, 4) my_set = (1, 2, 3, 4, 3, 2) print(my_set) # we can make set from a list # Output: (1, 2, 3) my_set = set((1, 2, 3, 2)) print(my_set) # set cannot have mutable items # here (3, 4) is a mutable list # this will cause an error. my_set = (1, 2, (3, 4))
Izhod
(1, 2, 3, 4) (1, 2, 3) Traceback (zadnji zadnji klic): Datoteka "", vrstica 15, v my_set = (1, 2, (3, 4)) TypeError: unhashable type: 'seznam'
Ustvarjanje praznega niza je nekoliko zapleteno.
Iz praznih zavitih oklepajev ()
bo prazen slovar v Pythonu. Za izdelavo niza brez elementov uporabimo set()
funkcijo brez kakršnega koli argumenta.
# Distinguish set and dictionary while creating empty set # initialize a with () a = () # check data type of a print(type(a)) # initialize a with set() a = set() # check data type of a print(type(a))
Izhod
Spreminjanje nabora v Pythonu
Kompleti so spremenljivi. Ker pa niso urejeni, indeksiranje nima pomena.
Do elementa nabora ne moremo dostopati ali ga spremeniti z indeksiranjem ali rezanjem. Nastavljena vrsta podatkov je ne podpira.
Z add()
metodo lahko dodamo en sam element in več elementov z uporabo update()
metode. update()
Način lahko zapise, sezname, vrvice ali drugih sklopov, kot svoje trditve. V vseh primerih se dvojnikom izognemo.
# initialize my_set my_set = (1, 3) print(my_set) # my_set(0) # if you uncomment the above line # you will get an error # TypeError: 'set' object does not support indexing # add an element # Output: (1, 2, 3) my_set.add(2) print(my_set) # add multiple elements # Output: (1, 2, 3, 4) my_set.update((2, 3, 4)) print(my_set) # add list and set # Output: (1, 2, 3, 4, 5, 6, 8) my_set.update((4, 5), (1, 6, 8)) print(my_set)
Izhod
(1, 3) (1, 2, 3) (1, 2, 3, 4) (1, 2, 3, 4, 5, 6, 8)
Odstranjevanje elementov iz niza
Določen predmet lahko odstranite iz nabora z uporabo metod discard()
in remove()
.
Edina razlika med obema je, da discard()
funkcija pusti nabor nespremenjen, če element ni prisoten v naboru. Po drugi strani pa bo remove()
funkcija povzročila napako v takem stanju (če element ni v naboru).
Naslednji primer bo to ponazoril.
# Difference between discard() and remove() # initialize my_set my_set = (1, 3, 4, 5, 6) print(my_set) # discard an element # Output: (1, 3, 5, 6) my_set.discard(4) print(my_set) # remove an element # Output: (1, 3, 5) my_set.remove(6) print(my_set) # discard an element # not present in my_set # Output: (1, 3, 5) my_set.discard(2) print(my_set) # remove an element # not present in my_set # you will get an error. # Output: KeyError my_set.remove(2)
Izhod
(1, 3, 4, 5, 6) (1, 3, 5, 6) (1, 3, 5) (1, 3, 5) Sledenje (zadnji zadnji klic): Datoteka "", vrstica 28, v KeyError: 2
Podobno lahko z pop()
metodo odstranimo in vrnemo element .
Ker je niz neurejen podatkovni tip, ni mogoče določiti, kateri element bo prikazan. Popolnoma samovoljno.
Z clear()
metodo lahko odstranimo tudi vse predmete iz nabora .
# initialize my_set # Output: set of unique elements my_set = set("HelloWorld") print(my_set) # pop an element # Output: random element print(my_set.pop()) # pop another element my_set.pop() print(my_set) # clear my_set # Output: set() my_set.clear() print(my_set) print(my_set)
Izhod
('H', 'l', 'r', 'W', 'o', 'd', 'e') H ('r', 'W', 'o', 'd', 'e' ) set ()
Python Set Operations
Nabori se lahko uporabljajo za izvajanje matematičnih nizov, kot so združitev, presečišče, razlika in simetrična razlika. To lahko storimo z operaterji ali metodami.
Upoštevajmo naslednja dva sklopa za naslednje operacije.
>>> A = (1, 2, 3, 4, 5) >>> B = (4, 5, 6, 7, 8)
Set Union

Unija A in B je skupek vseh elementov obeh sklopov.
Spajanje se izvede z uporabo |
operaterja. Enako lahko dosežemo z uporabo union()
metode.
# Set union method # initialize A and B A = (1, 2, 3, 4, 5) B = (4, 5, 6, 7, 8) # use | operator # Output: (1, 2, 3, 4, 5, 6, 7, 8) print(A | B)
Izhod
(1, 2, 3, 4, 5, 6, 7, 8)
Preizkusite naslednje primere o lupini Python.
# use union function >>> A.union(B) (1, 2, 3, 4, 5, 6, 7, 8) # use union function on B >>> B.union(A) (1, 2, 3, 4, 5, 6, 7, 8)
Nastavite presečišče

Presečišče A in B je nabor elementov, ki so skupni v obeh sklopih.
Križišče se izvaja z &
operaterjem. Enako lahko dosežemo z uporabo intersection()
metode.
# Intersection of sets # initialize A and B A = (1, 2, 3, 4, 5) B = (4, 5, 6, 7, 8) # use & operator # Output: (4, 5) print(A & B)
Izhod
(4, 5)
Preizkusite naslednje primere o lupini Python.
# use intersection function on A >>> A.intersection(B) (4, 5) # use intersection function on B >>> B.intersection(A) (4, 5)
Nastavi razliko

Razlika množice B od niza A (A - B) je niz elementov, ki so samo v A, ne pa tudi v B. Podobno je B - A skupek elementov v B, ne pa tudi v A.
Razlika se izvede z uporabo -
operatorja. Enako lahko dosežemo z uporabo difference()
metode.
# Difference of two sets # initialize A and B A = (1, 2, 3, 4, 5) B = (4, 5, 6, 7, 8) # use - operator on A # Output: (1, 2, 3) print(A - B)
Izhod
(1, 2, 3)
Preizkusite naslednje primere o lupini Python.
# use difference function on A >>> A.difference(B) (1, 2, 3) # use - operator on B >>> B - A (8, 6, 7) # use difference function on B >>> B.difference(A) (8, 6, 7)
Nastavite simetrično razliko

Simetrična razlika A in B je nabor elementov v A in B, ne pa v obeh (brez presečišča).
Simetrična razlika se izvede z uporabo ^
operatorja. Enako lahko dosežemo z uporabo metode symmetric_difference()
.
# Symmetric difference of two sets # initialize A and B A = (1, 2, 3, 4, 5) B = (4, 5, 6, 7, 8) # use operator # Output: (1, 2, 3, 6, 7, 8) print(A B)
Izhod
(1, 2, 3, 6, 7, 8)
Preizkusite naslednje primere o lupini Python.
# use symmetric_difference function on A >>> A.symmetric_difference(B) (1, 2, 3, 6, 7, 8) # use symmetric_difference function on B >>> B.symmetric_difference(A) (1, 2, 3, 6, 7, 8)
Druge metode nabora Python
There are many set methods, some of which we have already used above. Here is a list of all the methods that are available with the set objects:
Method | Description |
---|---|
add() | Adds an element to the set |
clear() | Removes all elements from the set |
copy() | Returns a copy of the set |
difference() | Returns the difference of two or more sets as a new set |
difference_update() | Removes all elements of another set from this set |
discard() | Removes an element from the set if it is a member. (Do nothing if the element is not in set) |
intersection() | Returns the intersection of two sets as a new set |
intersection_update() | Updates the set with the intersection of itself and another |
isdisjoint() | Returns True if two sets have a null intersection |
issubset() | Returns True if another set contains this set |
issuperset() | Returns True if this set contains another set |
pop() | Removes and returns an arbitrary set element. Raises KeyError if the set is empty |
remove() | Removes an element from the set. If the element is not a member, raises a KeyError |
symmetric_difference() | Returns the symmetric difference of two sets as a new set |
symmetric_difference_update() | Updates a set with the symmetric difference of itself and another |
union() | Returns the union of sets in a new set |
update() | Updates the set with the union of itself and others |
Other Set Operations
Set Membership Test
We can test if an item exists in a set or not, using the in
keyword.
# in keyword in a set # initialize my_set my_set = set("apple") # check if 'a' is present # Output: True print('a' in my_set) # check if 'p' is present # Output: False print('p' not in my_set)
Output
True False
Iterating Through a Set
We can iterate through each item in a set using a for
loop.
>>> for letter in set("apple"):… print(letter)… a p e l
Built-in Functions with Set
Built-in functions like all()
, any()
, enumerate()
, len()
, max()
, min()
, sorted()
, sum()
etc. are commonly used with sets to perform different tasks.
Function | Description |
---|---|
all() | Returns True if all elements of the set are true (or if the set is empty). |
any() | Returns True if any element of the set is true. If the set is empty, returns False . |
enumerate() | Returns an enumerate object. It contains the index and value for all the items of the set as a pair. |
len() | Returns the length (the number of items) in the set. |
max() | Returns the largest item in the set. |
min() | Returns the smallest item in the set. |
sorted() | Returns a new sorted list from elements in the set(does not sort the set itself). |
sum() | Returns the sum of all elements in the set. |
Python Frozenset
Frozenset je nov razred, ki ima značilnosti nabora, vendar ga po dodelitvi ni mogoče spremeniti. Medtem ko so nabori nespremenljivi seznami, so frozenseti nespremenljivi sklopi.
Spremenljive nabore ni mogoče razstaviti, zato jih ni mogoče uporabiti kot slovarske tipke. Po drugi strani pa so frozenseti hashable in se lahko uporabljajo kot ključi do slovarja.
Frozensets lahko ustvarite s funkcijo frozenset ().
Ta podatkovni tip podpira metode všeč copy()
, difference()
, intersection()
, isdisjoint()
, issubset()
, issuperset()
, symmetric_difference()
in union()
. Ker je nespremenljiv, nima metod za dodajanje ali odstranjevanje elementov.
# Frozensets # initialize A and B A = frozenset((1, 2, 3, 4)) B = frozenset((3, 4, 5, 6))
Preizkusite te primere na lupini Python.
>>> A.isdisjoint(B) False >>> A.difference(B) frozenset((1, 2)) >>> A | B frozenset((1, 2, 3, 4, 5, 6)) >>> A.add(3)… AttributeError: 'frozenset' object has no attribute 'add'