V tomto kurzu se dozvíte vše o sadách Pythonu; jak jsou vytvářeny, přidávání nebo odebírání prvků z nich a všechny operace prováděné na sadách v Pythonu.
Video: Sady v Pythonu
Sada je neuspořádaná sbírka položek. Každý prvek sady je jedinečný (žádné duplikáty) a musí být neměnný (nelze jej změnit).
Samotná sada je však proměnlivá. Můžeme z něj přidávat nebo odebírat položky.
Sady lze také použít k provádění operací matematické množiny, jako je sjednocení, průnik, symetrický rozdíl atd.
Vytváření sad Pythonu
Sada je vytvořena umístěním všech položek (prvků) do složených závorek ()
, oddělených čárkou nebo pomocí vestavěné set()
funkce.
Může mít libovolný počet položek a mohou být různých typů (celé číslo, float, n-tice, řetězec atd.). Sada však nemůže mít jako prvky proměnlivé prvky, jako jsou seznamy, sady nebo slovníky.
# 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)
Výstup
(1, 2, 3) (1.0, (1, 2, 3), 'Hello')
Vyzkoušejte také následující příklady.
# 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))
Výstup
(1, 2, 3, 4) (1, 2, 3) Traceback (poslední hovor poslední): Soubor "", řádek 15, v my_set = (1, 2, (3, 4)) TypeError: nehašovatelný typ: 'seznam'
Vytvoření prázdné sady je trochu složité.
Prázdné složené závorky ()
vytvoří v Pythonu prázdný slovník. Abychom vytvořili množinu bez jakýchkoli prvků, použijeme set()
funkci bez jakéhokoli argumentu.
# 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))
Výstup
Úprava sady v Pythonu
Sady jsou měnitelné. Protože jsou však neuspořádané, nemá indexování žádný význam.
K prvku sady nemůžeme přistupovat ani jej měnit pomocí indexování nebo krájení. Nastavený datový typ jej nepodporuje.
Můžeme přidat jeden prvek pomocí add()
metody a více prvků pomocí update()
metody. update()
Metoda může trvat tice, seznamy, řetězce nebo jiné soubory, jako svůj argument. Ve všech případech se vyhneme duplikátům.
# 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)
Výstup
(1, 3) (1, 2, 3) (1, 2, 3, 4) (1, 2, 3, 4, 5, 6, 8)
Odebrání prvků ze sady
Konkrétní položku lze ze sady odebrat pomocí metod discard()
a remove()
.
Jediný rozdíl mezi nimi je ten, že discard()
funkce ponechá sadu beze změny, pokud prvek není v sadě. Na druhou stranu remove()
funkce vyvolá chybu v takovém stavu (pokud prvek v sadě není).
Následující příklad to ilustruje.
# 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)
Výstup
(1, 3, 4, 5, 6) (1, 3, 5, 6) (1, 3, 5) (1, 3, 5) Traceback (poslední hovor poslední): Soubor „“, řádek 28, v KeyError: 2
Podobně můžeme pomocí pop()
metody odebrat a vrátit položku .
Protože sada je neuspořádaný datový typ, neexistuje způsob, jak určit, která položka bude vyskakována. Je to zcela svévolné.
Můžeme také odstranit všechny položky ze sady pomocí clear()
metody.
# 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)
Výstup
('H', 'l', 'r', 'W', 'o', 'd', 'e') H ('r', 'W', 'o', 'd', 'e' ) set ()
Operace sady Python
Sady lze použít k provádění operací matematické množiny, jako je sjednocení, průnik, rozdíl a symetrický rozdíl. Můžeme to udělat pomocí operátorů nebo metod.
Uvažujme následující dvě sady pro následující operace.
>>> A = (1, 2, 3, 4, 5) >>> B = (4, 5, 6, 7, 8)
Nastavit unii

Union of A and B is a set of all elements from both sets.
Spojení se provádí pomocí |
operátoru. Totéž lze dosáhnout pomocí union()
metody.
# 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)
Výstup
(1, 2, 3, 4, 5, 6, 7, 8)
Vyzkoušejte následující příklady na prostředí 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)
Nastavit křižovatku

Průnik A a B je sada prvků, které jsou společné v obou sadách.
Křižovatka se provádí pomocí &
operátoru. Totéž lze dosáhnout pomocí intersection()
metody.
# 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)
Výstup
(4, 5)
Vyzkoušejte následující příklady na prostředí Python.
# use intersection function on A >>> A.intersection(B) (4, 5) # use intersection function on B >>> B.intersection(A) (4, 5)
Nastavit rozdíl

Rozdíl množiny B od množiny A (A - B) je množina prvků, které jsou pouze v A, ale ne v B. Podobně B - A je množina prvků v B, ale ne v A.
Rozdíl se provádí pomocí -
operátoru. Totéž lze dosáhnout pomocí difference()
metody.
# 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)
Výstup
(1, 2, 3)
Vyzkoušejte následující příklady na prostředí 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)
Nastavte symetrický rozdíl

Symetrický rozdíl A a B je sada prvků v A a B, ale ne v obou (kromě průniku).
Symetrický rozdíl se provádí pomocí ^
operátoru. Totéž lze dosáhnout pomocí metody 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)
Výstup
(1, 2, 3, 6, 7, 8)
Vyzkoušejte následující příklady na prostředí 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)
Další metody nastavení Pythonu
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á třída, která má vlastnosti sady, ale její prvky nelze po přiřazení změnit. Zatímco n-tice jsou nezměnitelné seznamy, frozensety jsou neměnné sady.
Nastavitelné sady jsou nehašovatelné, takže je nelze použít jako klíče slovníku. Na druhou stranu jsou frozensety hashovatelné a lze je použít jako klíče ke slovníku.
Frozensety lze vytvořit pomocí funkce frozenset ().
Tento datový typ podpěry metody líbí copy()
, difference()
, intersection()
, isdisjoint()
, issubset()
, issuperset()
, symmetric_difference()
a union()
. Být neměnný, nemá metody, které přidávají nebo odebírají prvky.
# Frozensets # initialize A and B A = frozenset((1, 2, 3, 4)) B = frozenset((3, 4, 5, 6))
Vyzkoušejte tyto příklady na prostředí 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'