Set
Python has a built-in method called
set
. set type has the following characteristics- Sets are a collection which is unordered and unindexed
- Set elements are unique. Duplicate elements are not allowed.
- A set itself may be mutable, but the elements within a set is immutable.
You can create sets in two ways:
- 1.using
set
method followed by a parenthesis()
. - 2.using curly brackets
{}
.
You can have an ITERABLE object such as list or tuple within
set(<iter>)
. This returns the list or tuple as a set
wrapped in a curly bracket {}
. Any iterable object can be converted to a set using set()
. You can think of set()
as extend()
method of lists. A list within
set()
.Code
Output
numbers = set([1, 2, 3, 4, 5, 6, 7])
print(numbers)
{1, 2, 3, 4, 5, 6, 7}
A tuple within
set()
.Code
Output
numbers = set((1, 2, 3, 4, 5, 6, 7))
print(numbers)
{1, 2, 3, 4, 5, 6, 7}
A string with
a set()
.Code
Output
my_letters = set('ABCDEF')
print(my_letters)
{'E', 'F', 'C', 'B', 'A', 'D'}
While converting an iterable objects to a set, the returned set is deduplicated.
Code
Outputs
# Example 1
my_cities = set(['Krakow', 'Warsaw', 'Warsaw', 'Kielce'])
print(my_cities)
# Example 2
my_letters = set('AaBBCCDDEEE')
print(my_letters)
# Example 3
my_numbers = set('12345342')
print(my_numbers)
# Example 1 output
{'Krakow', 'Kielce', 'Warsaw'}
# Example 2 output
{'D', 'E', 'B', 'C', 'a', 'A'}
# Example 3 output
{'4', '1', '3', '2', '5'}
You can see that the output are unordered and deduplicated. The original orders are not kept.
set()
only accepts an object that is iterable such as a string, list or tuple. For example, integers are not iterable and it raises an error, to be specific TypeError
, while we try to create a set with integer.Code
Output
my_numbers = set(12345342)
print(my_numbers)
TypeError Traceback (most recent call last)
<ipython-input-5-2b17322ba0b5> in <module>()
----> 1 my_numbers = set(12345342)
2
3 print(my_numbers)
TypeError: 'int' object is not iterable
Code
Outputs
# Example 1
my_cities = {'Krakow', 'Warsaw', 'Warsaw', 'Kielce'}
print(my_cities)
# Example 2
my_letters = {'AaBBCCDDEEE'}
print(my_letters)
# Example 3
my_numbers = {12345342}
print(my_numbers)
# Example 1 output
{'Kielce', 'Warsaw', 'Krakow'}
# Example 2 output
{'AaBBCCDDEEE'}
# Example 3 output
{12345342}
As you can see, the curly brackets do not iterate through iterable elements. Each object is present in the set intact regardless of iterability.
set can also be empty, as we had empty list and empty tuple. You can create an empty set using built-in function of set() only because Python interprets empty curly brackets
{}
as an empty dictionary. Code
Output
empty_set = set()
# Check empty_set type
print(type(empty_set))
print(empty_set)
# print(type(empty_set))
<class 'set'>
# print(empty_set)
set()
A set can have a mixed datatypes
Code
Output
# set function
mixed_set = set([34, 3.2, 'cat', 1.858, False, True, 'Name'])
print(mixed_set)
# Curly brackets
mixed_set_curly = {34, 3.2, 'cat', 1.858, False, True, 'Name'}
print(mixed_set_curly)
# set function
{False, 1.858, 34, 3.2, True, 'cat', 'Name'}
# Curly brackets
{False, 1.858, 34, 3.2, True, 'cat', 'Name'}
Sets are unordered and changing with indexing brackets is not possible. Sets are mutable, but we cannot perform slicing or indexing operations to access its elements. Python raises
TypeError
when you use indexing or slicing operation.Code
Output
number_set = {1, 2, 3, 4}
print(number_set[:2])
TypeError Traceback (most recent call last)
<ipython-input-11-c24bd2d35a09> in <module>()
1 number_set = {1, 2, 3, 4}
2
----> 3 print(number_set[:2])
TypeError: 'set' object is not subscriptable
You can use set method of
add()
to add an element. add()
method can be used to add an element, it takes only an arguments (add(<obj>)
).Code
Output
new_set = {9, 8, 7, 6}
new_set.add(5)
print(new_set)
# print(new_set)
{5, 6, 7, 8, 9}
You can use set method
update()
to add elements . update()
requires an iterable datatype (simple or complex) (update(<iter>)
).Code
Output
new_set = {9, 8, 7, 6}
new_set.update([5, 2, 4, 3])
print(new_set)
# print(new_set)
{2, 3, 4, 5, 6, 7, 8, 9}
You can delete an element from a set using
discard()
or remove()
. remove()
will delete the element where it is present and raises a KeyError
where the element is absent. Code
Output
# Element is present
new_set = {9, 8, 7, 6}
new_set.remove(8)
print(new_set)
# Element is absent
new_set = {9, 8, 7, 6}
new_set.remove(5)
print(new_set)
# Element is present
# print(new_set)
{9, 6, 7}
# Element is absent
# print(new_set)
KeyError Traceback (most recent call last)
<ipython-input-23-25ec930c2723> in <module>()
1 new_set = {9, 8, 7, 6}
2
----> 3 new_set.remove(5)
4
5 print(new_set)
KeyError: 5
You can also use
discard()
to delete an element. if element is a member of the set, then removes it, but it does nothing when element is not a member of a set.Code
Output
# Element is present
new_set = {9, 8, 7, 6}
new_set.discard(8)
print(new_set)
# Element is absent
new_set = {9, 8, 7, 6}
new_set.discard(5)
print(new_set)
# Element is present
# print(new_set)
{9, 6, 7}
# Element is absent
# print(new_set)
{8, 9, 6, 7}
You can use pop() on a set. pop() returns an arbitrary element because sets are unordered.
Code
Ouput
new_set = {9, 8, 5, 4, 7, 6}
print(new_set.pop())
print(new_set)
print(new_set.pop())
4
print(new_set)
{5, 6, 7, 8, 9}
You can use Python set methods and operators to perform operations such as union, intersection, difference and symmetric difference.
The set made by combining the elements of two sets.

Union of set 1 and set 2 is the whole circles.
You can use
union()
method or | operator
.Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = {1, 4, 3, 5, 6}
# method 1
new_set = set_1.union(set_2)
print(new_set)
# method 2
new_set_2 = set_1 | set_2
print(new_set_2)
# print(new_set)
{1, 3, 4, 5, 6, 7, 8, 9}
# print(new_set_2)
{1, 3, 4, 5, 6, 7, 8, 9}
| operator
creates a union of two sets (both side have to be sets), otherwise, it raises an error. While union()
takes an iterable and converts it to a set before performing union operation. See example below; notice that the second set is a tuple. Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = (1, 4, 3, 5, 6)
# method 1
new_set = set_1.union(set_2)
print(new_set)
# method 2
print(set_1 | set_2)
# print(new_set)
{1, 3, 4, 5, 6, 7, 8, 9}
#print(set_1 | set_2)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-5ce450bc75fa> in <module>()
8
9 # method 2
---> 10 print(set_1 | set_2)
TypeError: unsupported operand type(s) for |: 'set' and 'tuple'
As you can see, the
union
runs successfully but | operator
raises TypeError
.set intersection is the elements that are only in both sets or the elements which are overlapping.

Intersect of set1 and set 2 (set 1 ^ set 2 section only)
You can use
intersection()
method or & operator
to get intersect of two sets.Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = {1, 4, 3, 5, 6}
# method 1
new_set = set_1.intersection(set_2)
print(new_set)
# method 2
new_set_2 = set_1 & set_2
print(new_set_2)
# print(new_set)
{4, 5, 6}
# print(new_set_2)
{4, 5, 6}
You can use
difference()
method or - operator
to get intersect of two sets. The difference of set A and set B is a set of elements that are only present in set A but not set B. The difference of set B and set A is vice versa.Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = {1, 4, 3, 5, 6}
# method 1
set_1_diff = set_1.difference(set_2)
print(set_1_diff)
# method 2
set_1_diff_op = set_1 - set_2
print(set_1_diff_op)
# print(set_1_diff)
{7, 8, 9}
#print(set_1_diff_ops)
{7, 8, 9}
Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = {1, 4, 3, 5, 6}
# method 1
set_2_diff = set_2.difference(set_1)
print(set_2_diff)
# method 2
set_2_diff_op = set_2 - set_1
print(set_2_diff_op)
# print(set_2_diff)
{1, 3}
#print(set_2_diff_ops)
{1, 3}
symmetric difference is a set that contains all the elements from set A and set B that is not shared. It can be seen as opposite of intersection.
You can You can use
symmetric_difference()
method or ^ operator
.Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = {1, 4, 3, 5, 6}
# method 1
sym_diff = set_1.symmetric_difference(set_2)
print(sym_diff)
# method 2
sym_diff_op = set_1 ^ set_2
print(sym_diff_op)
# print(sym_diff)
{1, 3, 7, 8, 9}
#print(sym_diff_ops)
{1, 3, 7, 8, 9}
All set methods and operators above support multiple set union, intersection, difference and symmetric difference when you are using methods and operators except symmetric difference method.
Code
Output
set_1 = {4, 5, 6, 7, 8, 9}
set_2 = {1, 4, 3, 5, 6}
set_3 = {1, 5, 6, 10}
# method 1
sym_diff_op = set_1 ^ set_2 ^ set_3
print(sym_diff_op)
# method 2
sym_diff = set_1.symmetric_difference(set_2, set_3)
print(sym_diff)
# print(sym_diff_op)
{3, 5, 6, 7, 8, 9, 10}
# print(sym_diff)
TypeError Traceback (most recent call last)
<ipython-input-20-cc52d7471fff> in <module>()
9
10 # method 2
---> 11 sym_diff = set_1.symmetric_difference(set_2, set_3)
12 print(sym_diff)
TypeError: symmetric_difference() takes exactly one argument (2 given)
Last modified 2yr ago