Lesson 10
Sets
1. What is a set
Set in Python is a data structure equivalent to sets in mathematics. It may consist of various elements; the order of elements in a set is undefined. You can add and delete elements of a set, you can iterate the elements of the set, you can perform standard operations on sets (union, intersection, difference). Besides that, you can check if an element belongs to a set.
Unlike arrays, where the elements are stored as ordered list, the order of elements in a set is undefined (moreover, the set elements are usually not stored in order of appearance in the set; this allows checking if an element belongs to a set faster than just going through all the elements of the set).
Any immutable data type can be an element of a set: a number, a string, a tuple. Mutable (changeable) data types cannot be elements of the set. In particular, list cannot be an element of a set (but tuple can), and another set cannot be an element of a set. The requirement of immutability follows from the way how do computers represent sets in memory.
2. How to define a set
You can define a set as simple as by naming all of its elements in brackets.
The only exception is empty set, which can be created using
the function set()
. If set(..)
has a
list, a string or a tuple as a parameter, it will return a set composed of its elements. For example,
A = {1, 2, 3} A = set('qwerty') print(A)
will print {'e', 'q', 'r', 't', 'w', 'y'}
as the output.
The order of elements is unimportant. For example, the program
A = {1, 2, 3} B = {3, 2, 3, 1} print(A == B)
will print True
, because A
and B
are equal
sets.
Each element may enter the set only once. set('Hello')
returns the set of four elements: {'H', 'e', 'l', 'o'}
.
3. Operations with elements
You can get the number of elements in the set using the function len
.
You can also iterate over all the elements of the set (in an undefined order!) using the loop for
:
primes = {2, 3, 5, 7, 11} for num in primes: print(num)
You can check whether an element belongs to a set using the keyword
in
: expressions like a in A
return a value of type bool
.
Similarly there's the opposite operation not in
.
To add an element to the set there is the method add
:
A = {1, 2, 3} print(1 in A, 4 not in A) A.add(4)
There are two methods to remove an element from a set:
discard
and remove
. Their behavior varies
only in case if the deleted item was not in the set.
In this case the method discard
does nothing and the method
remove
throws exception KeyError
.
Finally, pop
removes one random element from the set and returns its value. If the set is empty, pop
generates
the exception KeyError
.
You can transform a set to list using the function list
.
4. Operations on sets
This is how you perform the well-known operations on sets in Python:
A | B
A.union(B)
|
Returns a set which is the union of sets
A and B .
|
A |= B
A.update(B)
|
Adds all elements of array
B to the set A .
|
A & B
A.intersection(B)
|
Returns a set which is the intersection of sets
A and B .
|
A &= B
A.intersection_update(B)
|
Leaves in the set A only items that belong to the set B .
|
A - B
A.difference(B)
|
Returns the set difference of
A and B (the elements included in A ,
but not included in B ).
|
A -= B
A.difference_update(B)
|
Removes all elements of
B from the set A .
|
A ^ B
A.symmetric_difference(B)
|
Returns the symmetric difference of sets
A and B (the elements belonging to either A
or B , but not to both sets simultaneously).
|
A ^= B
A.symmetric_difference_update(B)
|
Writes in
A the symmetric difference of sets A and B .
|
A <= B
A.issubset(B)
|
Returns
true if A is a subset of B .
|
A >= B
A.issuperset(B)
|
Returns
true if B is a subset of A .
|
A < B
|
Equivalent to
A <= B and A != B
|
A > B
|
Equivalent to
A >= B and A != B
|