What is a Python Set?
A Python set is an unordered and unindexed collection of comma-separated values, enclosed in curly brackets {}
. Sets can contain items (elements) of different data types (string, integer, float, tuple, etc.).
Each element in a set must be unique and immutable. This means a set cannot have a list, set, or dictionary as its items, as these are mutable.
Sets themselves are mutable. This means you can delete existing items or add new ones. Frozenset and tuple would be better options if you need an immutable collection.
Python sets are useful for mathematical set operations, such as union and intersect.
This guide is designed to walk you through how to use Python sets efficiently, with clear, commented code samples.
- Create a set
- Add items to a set
- Iterate a set
- Update a set
- Delete from a set
- Test set membership
- Compare sets
- Set operators
- Built-in functions
- Set methods
- Sets vs. frozensets
- Errors and exceptions
Create a Set
There are 2 ways to create a set in Python:
- Using the
set()
constructor - Placing a comma-separated collection of elements inside curly braces
{}
.
The main differences between using the set()
constructor and using the curly braces {}
are:
- The argument passed to
set()
is an iterable that will generate a list of elements to be stored in the set - The structure of objects passed to the curly braces
{}
is preserved, even if the values are iterable (e.g. string)
# Create a set of strings using the set() constructor string_set = set(("val1","val2","val3","val4")) print(string_set) # Pass a single string to the set() constructor a = "TestString" print("set(a) = ", set(a)) # For comparison, pass a single string to the list() constructor a = "TestString" print("list(a) = ", list(a))
Output:
{'val3', 'val4', 'val2', 'val1'}
set(a) = {'t', 'g', 'e', 'S', 's', 'T', 'n', 'i', 'r'}
list(a) = ['T', 'e', 's', 't', 'S', 't', 'r', 'i', 'n', 'g']
The output above shows how the list()
constructor preserves the order of the string, whereas the set()
constructor does not.
# Create a set of strings string_set = {"val1","val2","val3"} print(string_set) # Create a set containing values of multiple data types set1 = {1,"val1",4.55,(2,3,4,5)} print(set1)
Output:
{'val3', 'val2', 'val1'}
{1, (2, 3, 4, 5), 4.55, 'val1'}
# Confirmation that an error is thrown when a mutable type (list) is used as a set element set1 = {1,"val1",[1,2,3,4]} print(set1)
Output:
Traceback (most recent call last):
File "", line 1, in
set1 = {1,"val1",[1,2,3,4]}
TypeError: unhashable type: 'list'
# Confirmation that a set cannot contain duplicate items set1 = {1,2,2,2,3,4} print(set1)
Output:
{1, 2, 3, 4}
# Confirmation that creating a set using curly braces {} preserves the structure of the iterable set1 = {"TestString"} print(set1)
Output:
{'TestString'}
Creating an empty set
If you need to create an empty set, you can use set()
. If you use {}
, you will create an empty dictionary.
# Check that a dictionary is created when using {} x = {} print("type({}) =", type(x)) # Check that a set is created when using set() x = set() print("type(set()) =", type(x))
Output:
type({}) = class 'dict'
type(set()) = class 'set'
Add Items to a Set
There are 2 main methods to add items to a set in Python:
add()
method for adding single itemupdate()
method for adding multiple items
# Adding a single element using add() set1 = {1,2,3} print("set1 =", set1) set1.add(4) print("set1.add(4) =", set1)
Output:
set1 = {1, 2, 3}
set1.add(4) = {1, 2, 3, 4}
2. Using update()
# Create 2 seperate sets set1 = {1,2,3} set2 = {5,6,7} # Add the contents of set2 to set1 using update() set1.update(set2) print("set1 =", set1) # Create set3 with different data types set3 = {(8,9),10,"11"} # Add the contents of set3 to set1 using update() set1.update(set3) print("\nAdded a tuple, int, and string to set1: \n", set1)
Output:
Set1 = {1, 2, 3, 5, 6, 7}
Added a tuple, int, and string to set1:
{(8, 9), 1, 2, 3, 5, 6, 7, 10, '11'}
Iterate a Set
Items in a set can be iterated over in many ways. Two of the easiest to remember are:
- Using a
for
loop - Using comprehension
for()
loop
# Creating a single-item string set set1 = set("Test") # Iterate using for loop print("for() loop of set('Test'):") for s in set1: print(s) # Creating a multi-item integer set set1 = {1,4,5,3} # Iterate using for loop print("\nfor() loop of {1,4,5,3}:") for s in set1: print(s)
Output:
for() loop of set('Test'):
e
t
s
T
for() loop of {1,4,5,3}:
1
3
4
5
2. Using comprehension
# Creating a single-item string set set1 = set("Test") # Iterate using list-comprehension print("Comprehension of set('Test'):") compSet = [print(s) for s in set1] # Creating a multi-item integer set set2 = {1,4,5,3} # Iterate using list-comprehension print("\nComprehension of {1,4,5,3}:") compSet = [print(s) for s in set2]
Output:
Comprehension of set('Test'):
e
t
s
T
Comprehension of {1,4,5,3}:
1
3
4
5
Update a Set
Sets are mutable, which means that once a set is created, its items cannot be modified. Indexing and slicing cannot be used to access elements, as sets are unordered and unindexed.
Delete from a Set
There are 5 methods to delete items from a set, or delete the set itself:
discard()
method. If the item does not exist, discard() will not raise an errorremove()
method. If the item does not exist, remove() will raise an errordel
keyword, deletes the set completelyclear()
method empties the setpop()
method removes the last item. Sets are unordered, so no control over which item this is
The only difference between discard()
and remove()
is that remove()
will raise an error if the item isn’t in the set, while discard()
will not.
# Create and populate a set set1 = {1,2,3,4,5} print("set1 = ", set1) # Attempt to discard an item that doesn't exist in the set set1.discard(6) # Won't throw an error print("set1 discard(6) = ", set1) # Attempt to discard an item that does exist in the set set1.discard(5) print("set1 discard(5) = ", set1) # 5 has now been discarded
Output:
set1 = {1, 2, 3, 4, 5}
set1 discard(6) = {1, 2, 3, 4, 5}
set1 discard(5) = {1, 2, 3, 4}
2. remove()
# Create and populate a set set1 = {1,2,3,4,5} print("set1 = ", set1) # Attempt to remove an item that doesn't exist in the set set1.remove(6) # Will throw a KeyError print("set1 remove(6) = ", set1) # Attempt to remove an item that does exist in the set set1.remove(5) print("set1 remove(5) = ", set1) # 5 has now been removed
Output:
set1 = {1, 2, 3, 4, 5}
Traceback (most recent call last):
File "", line 5, in
set1.remove(6) # Will throw a KeyError
KeyError: 6
set1 remove(5) = {1, 2, 3, 4}
3. del
Whereas the clear()
method removes all items but leaves the list available, the del
keyword deletes the set completely.
# Create and populate a set set1 = {1,2,3,4,5} print("set1 = ", set1) # Call del on the set and attempt to print the result del set1 print("set1 = ", set1)
Output:
set1 = {1, 2, 3, 4, 5}
Traceback (most recent call last):
File "", line 6, in
print("set1 = ", set1)
NameError: name 'set1' is not defined
4. clear()
The clear()
method can be used to remove all items from a set, but leave the set object itself still available.
# Create and populate a set set1 = {"val1","val2","val3","val4"} print("set1 = ", set1) # Clear the set and print the remaining contents set1.clear() print("set1 = ", set1)
Output:
set1 = {'val3', 'val4', 'val2', 'val1'}
set1 = set()
5. pop()
Because sets are unordered, the pop()
method will remove an item completely at random from the set. In comparison, using the pop()
method on a list will always remove the most recently added item.
# Create and populate a set set1 = {1,2,3,4,5,6} print("set1 = ", set1) # Pop() an element in the set print("\nelement deleted by set1.pop() = ", set1.pop()) print("set1 = ", set1) # Pop() another element in the set print("\nelement deleted by set1.pop() = ", set1.pop()) print("set1 = ", set1)
Output:
set1 = {1, 2, 3, 4, 5, 6}
element deleted by set1.pop() = 1
set1 = {2, 3, 4, 5, 6}
element deleted by set1.pop() = 2
set1 = {3, 4, 5, 6}
Test Set Membership
To check if a set contains a value, you can use the in
and not in
keywords.
in
keyword:
# Check membership of an integer in a set set1 = {1,2,3,4} print("set1 =", set1) print("TRUE test: 1 is in set1 =", 1 in set1) print("FALSE test: 6 is in set1 =", 6 in set1) # Check membership of a string in a set set1 = {"val1","val2","val3"} print("set1 =", set1) print("TRUE test: 'val1' is in set1 =", "val1" in set1) print("FALSE test: 'val8' is in set1 =", "val8" in set1)
Output:
set1 = {1, 2, 3, 4}
TRUE test: 1 is in set1 = True
FALSE test: 6 is in set1 = False
set1 = {'val1', 'val2', 'val3'}
TRUE test: 'val1' is in set1 = True
FALSE test: 'val8' is in set1 = False
Using the not in
keyword:
# Check membership of an integer not in a set set1 = {1,2,3,4} print("set1 =", set1) print("TRUE test: 6 is not in set1 =", 6 not in set1) print("FALSE test: 1 is in not set1 =", 1 not in set1) # Check membership of a string not in a set set1 = {"val1","val2","val3"} print("set1 =", set1) print("TRUE test: 'val8' is not in set1 =", "val8" not in set1) print("FALSE test: 'val1' is not in set1 =", "val1" not in set1)
Output:
set1 = {1, 2, 3, 4}
TRUE test: 6 is not in set1 = True
FALSE test: 1 is in not set1 = False
set1 = {'val3', 'val1', 'val2'}
TRUE test: 'val8' is not in set1 = True
FALSE test: 'val1' is not in set1 = False
Compare Sets
- Sets are equal if every element of each set is contained in the other
- Set A is greater than Set B if Set A is a superset of set B
- Set A is less than Set B if Set A is a subset of set B
# Create our test sets set1 = {1,2,3,4} set2 = {1,2,3,4} set3 = {1,2,3,4,5} set4 = {2,3,4} print("set1 =", set1) print("set2 =", set2) print("set3 =", set3) print("set4 =", set4) # Check if set1 and set2 are equal (TRUE) print("set1 is equal to set2 =", set1 == set2) # Check if set1 and set3 are equal (FALSE) print("set1 is equal to set3 =", set1 == set3) # Check if set3 is greater than set2 (TRUE) print("set3 is greater than set2 =", set3 > set2) # Check if set2 is greater than set3 (FALSE) print("set2 is greater than set3 =", set2 > set3) # Check if set2 is less than set3 (TRUE) print("set2 is less tan set3 =", set2 < set3) # Check if set3 is less than set4 (FALSE) print("set3 is less than set4 =", set3 < set4)
Output:
set1 = {1, 2, 3, 4}
set2 = {1, 2, 3, 4}
set3 = {1, 2, 3, 4, 5}
set4 = {2, 3, 4}
set1 is equal to set2 = True
set1 is equal to set3 = False
set3 is greater than set2 = True
set2 is greater than set3 = False
set2 is less tan set3 = True
set3 is less than set4 = False
Set Operators
|
operator is the equivalent of using the union() method. A | B.&
operator is the equivalent of using the intersection() method. A & B.-
operator is the equivalent of using the difference() method. A - B.^
is the equivalent of using the symmetric_difference() method. A ^ B.
# Create our test sets set1 = {1,2,3,4} set2 = {5,6,7,8} set3 = {7,8,9,10,11} print("set1 =", set1) print("set2 =", set2) print("set3 =", set3) # Union together set1 and set2 using the | operator print("set1 | set2 =", set1 | set2) # Check the intersection of set2 and set3 using the & operator print("set2 & set3 =", set2 & set3) # Check the difference between set3 and set2 using the - operator print("set3 - set2 =", set3 - set2) # Check the symmetric difference between set2 and set3 using the ^ operator print("set2 ^ set3 =", set2 ^ set3)
Output:
set1 = {1, 2, 3, 4}
set2 = {8, 5, 6, 7}
set3 = {7, 8, 9, 10, 11}
set1 | set2 = {1, 2, 3, 4, 5, 6, 7, 8}
set2 & set3 = {8, 7}
set3 - set2 = {9, 10, 11}
set2 ^ set3 = {5, 6, 9, 10, 11}
Built-in Functions
Python sets can be used with a variety of in-built functions. This includes len()
, min()
, max()
and sorted()
.
The len()
function can be used to return how many items are in a set.
# Create and populate a set set1 = {1,2,3,4,5} print("The length of set1 =", len(set1))
Output:
The length of set1 = 5
min() function
The min()
function returns the minimum value in a set. If the set contains strings, the shortest string will be returned. If there are multiple strings that match the minimum length (e.g. "ab" and "cd"), the min()
function returns the lowest ascii combination that matches the minimum length in the set.
A TypeError will be returned if a set containing mixed data types (e.g. combination of strings and integers) to the min()
function.
# Create and populate a set of integers set1 = {1,2,3,4,5} print("Minimum value in set1 =", min(set1)) # Create and populate a set of strings set2 = {"ab","abcd","abcde"} print("Minimum value in set2 =", min(set2)) # Create and populate a set of strings of equal length set3 = {"ab","aa","ac"} print("Minimum value in set3 =", min(set3)) # Create and populate a set of strings and integers, to test the TypeError set4 = {5,1,"ab","abcd","a",6} print("Minimum value in set4 =", min(set4))
Output:
Minimum value in set1 = 1
Minimum value in set2 = ab
Minimum value in set3 = aa
Traceback (most recent call last):
File "main.py", line 15, in
print("Minimum value in set4 =", min(set4))
TypeError: '<' not supported between instances of 'str' and 'int'
max() function
The max()
function returns the maximum value in a set. If the set contains strings, the longest string will be returned. If there are multiple strings that match the maximum length (e.g. "ab" and "cd"), the max()
function returns the highest ascii combination that matches the maximum length in the set.
A TypeError will be returned if a set containing mixed data types (e.g. combination of strings and integers) to the max()
function.
# Create and populate a set of integers set1 = {1,2,3,4,5} print("Maximum value in set1 =", max(set1)) # Create and populate a set of strings set2 = {"ab","abcd","abcde"} print("Maximum value in set2 =", max(set2)) # Create and populate a set of strings of equal length set3 = {"ab","aa","ac"} print("Maximum value in set3 =", max(set3)) # Create and populate a set of strings and integers, to test the TypeError set4 = {5,1,"ab","abcd","a",6} print("Maximum value in set4 =", max(set4))
Output:
Maximum value in set1 = 5
Maximum value in set2 = abcde
Maximum value in set3 = ac
Traceback (most recent call last):
File "main.py", line 15, in
print("Maximum value in set4 =", max(set4))
TypeError: '>' not supported between instances of 'str' and 'int'
sorted() function
The sorted()
function sorts the set into ascending order by default. To reverse the sort order, an additional parameter can be specified in the form: sorted(
.
For strings, the sort is based on the combined ascii value of the characters.
# Create and populate a set of integers set1 = {1,2,3,4,5} print("set1 with sorted() applied =", sorted(set1)) print("set1 with sorted(,reverse=True) applied =", sorted(set1, reverse=True)) # Create and populate a set of strings set2 = {"ab","abcd","abcde"} print("set2 with sorted() applied =", sorted(set2)) print("set2 with sorted( ,reverse=True) applied =", sorted(set2, reverse=True)) # Create and populate a set of strings of equal length set3 = {"ab","aa","ac"} print("set3 with sorted() applied =", sorted(set3)) print("set3 with sorted( ,reverse=True) =", sorted(set3,reverse=True)) # Create and populate a set of strings and integers, to test the TypeError set4 = {5,1,"ab","abcd","a",6} print("set4 with sorted() applied =", sorted(set4))
Output:
set1 with sorted() applied = [1, 2, 3, 4, 5]
set1 with sorted(,reverse=True) applied = [5, 4, 3, 2, 1]
set2 with sorted() applied = ['ab', 'abcd', 'abcde']
set2 with sorted(,reverse=True) applied = ['abcde', 'abcd', 'ab']
set3 with sorted() applied = ['aa', 'ab', 'ac']
set3 with sorted(,reverse=True) = ['ac', 'ab', 'aa']
Traceback (most recent call last):
File "main.py", line 18, in
print("set4 with sorted() applied =", sorted(set4))
TypeError: '<' not supported between instances of 'str' and 'int'
sum() function
The sum()
function can be used to calculate the sum total of all elements in a set composed solely of numeric data types (integer, decimal, etc.).
If sum()
is applied to a set that contains strings or other iterables, Python reports a TypeError due to unsupported operand types.
# Create a set of integers int_set = {1,2,3,4,5} print("int_set =", int_set) # sum() the int_set elements print("sum(int_set) =", sum(int_set)) # Create a set of decimals dec_set = {1.2, 2.4, 3.5, 5.6} print("dec_set =", dec_set) # sum() the dec_set elements print("sum(dec_set) =", sum(dec_set)) # Create a set of strings str_set = {"a","b","c","d"} print("str_set =", str_set) # Attempt to sum() the str_set elements print("sum(str_set) =", sum(str_set))
Output:
int_set = {1, 2, 3, 4, 5}
sum(int_set) = 15
dec_set = {1.2, 2.4, 3.5, 5.6}
sum(dec_set) = 12.7
str_set = {'d', 'c', 'a', 'b'}
Traceback (most recent call last):
File "main.py", line 20, in
print("sum(str_set) =", sum(str_set))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Set Methods
Python sets support the following methods: add()
, clear()
, copy()
, difference()
, difference_update()
, discard()
, intersection()
, intersection_update()
, isdisjoint()
, issubset()
, issuperset()
, pop()
, remove()
, symmetric_difference()
, symmetric_difference_update()
, union()
, update()
.
Method | Description |
---|---|
add() | Adds a single value to an existing set. |
clear() | Delete all elements from a set. |
copy() | Create a new set by copying an existing one. |
difference() | Highlight the difference in elements between two sets. |
difference_update() | Updates the set by removing items found in others. Multiple sets can be passed to the method, by comma separating them inside the parentheses. |
discard() | Removes a specific element from a set. Does not raise exceptions if specified element does not exist. |
intersection() | Only returns values that appear in both sets. |
intersection_update() | Overwrites the set that calls the method so that it only contains similarities between the calling set and the iterable set. |
isdisjoint() | Returns a Boolean stating whether the set contents overlap with the specified iterable. |
issubset() | Returns a Boolean stating whether the set contents are contained within the specified iterable. |
issuperset() | Returns a Boolean stating whether the full contents of the specified iterable are contained within the set. |
pop() | Removes an element at random from the set. |
remove() | Removes a specified element from the set. Raises KeyError if item doesn't exist in set. |
symmetric_difference() | Returns a new set containing elements that are in the calling set or iterable, but not both. |
symmetric_difference_update() | Updates the set calling the method with the items that appear in either the calling set or iterable, but not both. |
union() | Returns a new set, containing a distinct list of the values from the set and the iterable combined. |
update() | Add multiple items to a set. |
The add()
method is used to add a single value to an existing set.
# Create a test set set1 = {1,2,3,4} print("set1 =", set1) # Add a new integer to the test set print("set1.add(5) =", set1.add(5))
Output:
set1 = {1, 2, 3, 4}
set1.add(5) = None
clear()
The clear()
method is used to delete all elements from a set.
# Create a test set set1 = {"a","b","c"} print("set1 =", set1) # Clear set1 set1.clear() print("set1.clear() =", set1)
Output:
set1 = {'a', 'c', 'b'}
set1.clear() = set()
copy()
The copy()
method is used to create a copy of a set.
# Create a test set set1 = {1,2,3,4,5} print("set1 =", set1) # Create a copy of set1 and assign to set2 set2 = set1.copy() print("set1.copy() =", set2)
Output:
set1 = {1, 2, 3, 4, 5}
set1.copy() = {1, 2, 3, 4, 5}
difference()
The difference()
method is used to highlight the difference in elements between two sets. e.g. x.difference(y)
would return values that appeared in set x
but not in set y
.
Returns the resulting elements in a new set object.
# Create two sets, containing similarities and differences set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print("set1 =", set1) print("set2 =", set2) # Check for values that appear in set1 but not set2 print("set1.difference(set2) =", set1.difference(set2)) # Check for values that appear in set2 but not set1 print("set2.difference(set1) =", set2.difference(set1))
Output:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set1.difference(set2) = {1, 2, 3}
set2.difference(set1) = {8, 6, 7}
difference_update()
The difference_update()
method performs a similar role to the difference()
method, but overwrites the set on the left to only contain differences.
# Create two sets, containing similarities and differences set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print("set1 =", set1) print("set2 =", set2) # Perform difference_update() between set1 and set2 set1.difference_update(set2) print("set1.difference_update(set2) =", set1) # Recreate our two sets set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} # Perform difference_update() between set2 and set1 set2.difference_update(set1) print("set2.difference_update(set1)) =", set2)
Output:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set1.difference_update(set2) = {1, 2, 3}
set2.difference_update(set1)) = {6, 7, 8}
discard()
The discard()
method removes a specific element from a set. Will not raise any exceptions or error if the element you attempt to discard does not exist in the set.
# Create a test set set1 = {1,2,3,4} print("set1 =", set1) # Discard element with value of 4 set1.discard(4) print("set1.discard(4) =", set1)
Output:
set1 = {1, 2, 3, 4}
set1.discard(4) = {1, 2, 3}
intersection()
The intersection()
works in the opposite way to the difference()
method, only returning values that appear in both sets.
# Create two sets, containing similarities and differences set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print("set1 =", set1) print("set2 =", set2) # Check for values that appear in set1 and set2 print("set1.intersection(set2) =", set1.intersection(set2))
Output:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set1.intersection(set2) = {4, 5}
intersection_update()
The intersection_update()
method performs a similar role to the intersection()
method, but overwrites the set on the left to only contain similarities.
# Create two sets, containing similarities and differences set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print("set1 =", set1) print("set2 =", set2) # Perform intersection_update() between set1 and set2 set1.intersection_update(set2) print("After set1.intersection_update(set2), set1 =", set1)
Output:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
After set1.intersection_update(set2), set1 = {4, 5}
isdisjoint()
The isdisjoint()
method returns a Boolean stating whether the set contents overlap with the specified iterable.
Returns True
if the intersection of the set and iterable is an empty set, or if the method is passed an empty iterable.
Syntax: set.isdisjoint(iterable)
# Create a test set set1 = {1,2,3,4} print("set1 =", set1) # Check disjoint() against a list that overlaps set1 (FALSE) print("set1.isdisjoint([1,2]) =", set1.isdisjoint([1,2])) # Check disjoint() against a set that partially overlaps set1 (FALSE) print("set1.isdisjoint({2,3,4}) =", set1.isdisjoint({2,3,4})) # Check disjoint() against a set that doesn't overlap set1 (TRUE) print("set1.isdisjoint({5,6,7} =", set1.isdisjoint({5,6,7})) # Check disjoint() against an empty set (TRUE) print("set1.isdisjoint(set()) =", set1.isdisjoint(set()))
Output:
set1 = {1, 2, 3, 4}
set1.isdisjoint([1,2]) = False
set1.isdisjoint({2,3,4}) = False
set1.isdisjoint({5,6,7} = True
set1.isdisjoint(set()) = True
issubset()
The issubset()
method returns a Boolean stating whether the set contents are contained within the specified iterable. Returns False
if the method is passed an empty iterable.
Syntax: set.isiterable(iterable)
# Create a test set set1 = {1,2,3} print("set1 =", set1) # Check issubset() against a list that contains all values in set1 (TRUE) print("set1.issubset([1,2,3,4,5]) =", set1.issubset([1,2,3,4,5])) # Check issubset() against a set that contains all values in set1 (TRUE) print("set1.issubset({0,1,2,3,4}) =", set1.issubset({0,1,2,3,4})) # Check issubset() against a set that contains some of the values in set1 (FALSE) print("set1.issubset({2,3,4,5}) =", set1.issubset({2,3,4,5})) # Check issubset() against an empty set (FALSE) print("set1.issubset(set()) =", set1.issubset(set()))
Output:
set1 = {1, 2, 3}
set1.issubset([1,2,3,4,5]) = True
set1.issubset({0,1,2,3,4}) = True
set1.issubset({2,3,4,5}) = False
set1.issubset(set()) = False
issuperset()
The issuperset()
method returns a Boolean stating whether the full contents of the specified iterable are contained within the set. Returns True
if the method is passed an empty iterable.
Syntax: set.issuperset(iterable)
# Create a test set set1 = {1,2,3,4,5} print("set1 =", set1) # Check issuperset() against a list whose values are all in set1 (TRUE) print("set1.issuperset([1,2,3]) =", set1.issuperset([1,2,3])) # Check issuperset() against a set whose values are all in set1 (TRUE) print("set1.issuperset({1,2,3}) =", set1.issuperset({1,2,3})) # Check issuperset() against a set containing values not found in set1 (FALSE) print("set1.issuperset({1,2,3,6}) =", set1.issuperset({1,2,3,6})) # Check issuperset() against an empty set (TRUE) print("set1.issuperset(set()) =", set1.issuperset(set()))
Output:
set1 = {1, 2, 3, 4, 5}
set1.issuperset([1,2,3]) = True
set1.issuperset({1,2,3}) = True
set1.issuperset({1,2,3,6}) = False
set1.issuperset(set()) = True
pop()
The pop()
method removes an element at random from the set. Returns the element removed.
Syntax: set.pop()
# Create a test set set1 = {1,2,3,4} print("set1 =", set1) # pop() set1 to remove a random element print("set1.pop() =", set1.pop()) print("set1 =", set1) # pop() set1 to remove another random element print("set1.pop() =", set1.pop()) print("set1 =", set1)
Output:
set1 = {1, 2, 3, 4}
set1.pop() = 1
set1 = {2, 3, 4}
set1.pop() = 2
set1 = {3, 4}
remove()
The remove()
method removes a specified element from the set. Returns None.
Syntax: set.remove(x)
# Create a test set set1 = {1,2,3,4} print("set1 =", set1) # Remove 1 from set1 set1.remove(1) print("set1 after set1.remove(1) =", set1) # Attempt to remove 5 from set1 set1.remove(5)
Output:
set1 = {1, 2, 3, 4}
set1 after set1.remove(1) = {2, 3, 4}
Traceback (most recent call last):
File "main.py", line 10, in
set1.remove(5)
KeyError: 5
symmetric_difference()
The symmetric_difference()
method returns a new set containing elements that are in the calling set or iterable, but not both. The symmetric_difference()
of an empty set against an empty set is an empty set.
Syntax: setA.symmetric_difference(setB)
# Create 2 test sets set1 = {1,2,3,4} set2 = {3,4,5,6} print("set1 =", set1) print("set2 =", set2) # Check the symmetric_difference() between set1 and set2 print("set1.symmetric_difference(set2) =", set1.symmetric_difference(set2)) # Check the symmetric_difference() between set1 and an empty set print("set1.symmetric_difference(set()) =", set1.symmetric_difference(set())) # Check the symmetric_difference() between set() and set() print("set().symmetric_difference(set()) =", set().symmetric_difference(set()))
Output:
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set1.symmetric_difference(set2) = {1, 2, 5, 6}
set1.symmetric_difference(set()) = {1, 2, 3, 4}
set().symmetric_difference(set()) = set()
symmetric_difference_update()
The symmetric_difference_update()
method updates the set calling the method with the items that appear in either the calling set or iterable, but not both.
Passing in an empty iterable will always return the full contents of the set that calls the method.
Syntax: set.symmetric_difference_update(iterable)
# Create a test set set1 = {1,2,3,4} set2 = {3,4,5,6} print("set1 =", set1) print("set2 =", set2) # Update set1 with the symmetric_difference() of set1 and set2 set1.symmetric_difference_update(set2) print("set1.symmetric_difference_update(set2) =", set1) # Update set1 with the symmetric_difference() of set1 and an empty set set1.symmetric_difference_update(set()) print("set1.symmetric_difference_update(set()) =", set1)
Output:
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set1.symmetric_difference_update(set2) = {1, 2, 5, 6}
set1.symmetric_difference_update(set()) = {1, 2, 5, 6}
union()
The union()
method returns a new set, containing a distinct list of the values from the set and the iterable combined.
Syntax: set.union(iterable)
# Create test sets set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print("set1 =", set1) print("set2 =", set2) # Attempt to union() set1 and set2 set3 = set1.union(set2) print("set1.union(set2) =", set3) # Attempt to union() set3 with an empty set set4 = set3.union(set()) print("set3.union(set()) =", set3.union(set())) # Attempt to union() set4 with a list iterable set5 = set4.union([8,9,10,11]) print("set4.union([8,9,10,11]) =", set5)
Output:
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set1.union(set2) = {1, 2, 3, 4, 5, 6, 7, 8}
set3.union(set()) = {1, 2, 3, 4, 5, 6, 7, 8}
set4.union([8,9,10,11]) = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
update()
The update()
method allows you to add multiple new elements to a set. New elements are passed to the method in the form of an iterable.
Syntax: set.update(iterable)
# Create a test set set1 = {1,2,3,4} print("set1 =", set1) # Update set1 with values held in a list set1.update([5,6,7]) print("set1.update([5,6,7]) =", set1) # Update set1 with values held in a set set1.update({7,8,9}) print("set1.update({7,8,9}) =", set1) # Attempt to update set1 with an empty set set1.update(set()) print("set1.update(set()) =", set1)
Output:
set1 = {1, 2, 3, 4}
set1.update([5,6,7]) = {1, 2, 3, 4, 5, 6, 7}
set1.update({7,8,9}) = {1, 2, 3, 4, 5, 6, 7, 8, 9}
set1.update(set()) = {1, 2, 3, 4, 5, 6, 7, 8, 9}
Sets vs. Frozensets
The frozenset()
method returns an immutable object, initialized with elements from the iterable passed in. Frozen set is the same as a Python set object, except for the fact that it's immutable. Elements of a standard set can be modified at any time, while elements of frozen set remains the same after creation.
Errors and Exceptions
- Using the
remove()
method, a KeyError will be raised if you pass the method a value that doesn't exist in the set - Using the
pop()
method, a KeyError will be raised if the set is empty - TypeError from passing a tuple containing both strings and integers to functions such as
min()
andmax()
.