Python Sets
Python comes equipped with several built-in data types to help us organize our data. These structures include lists, dictionaries, tuples and sets.
From the Python 3 documentation
A set is an unordered collection with no duplicate elements. Basic uses include membership testing and eliminating duplicate entries.
Read Python Sets: What, Why and How for a more in-deep reference.
Initializing a set
There are two ways to create sets: using curly braces {} and the built-in function set()
Empty Sets
When creating set, be sure to not use empty curly braces {} or you will get an empty dictionary instead.
# Create set using curly braces or set() function
s = {1, 2, 3} # Using curly braces
s = set([1, 2, 3]) # Using set() constructor
# Warning: empty {} creates a dictionary, not a set
s = {} # this will create a dictionary instead of a set
type(s) # Returns <class 'dict'>
<class 'dict'>
Unordered collections of unique elements
A set automatically removes all the duplicate values.
# Sets automatically remove duplicates
s = {1, 2, 3, 2, 3, 4} # Duplicates are removed
s # Returns {1, 2, 3, 4}
{1, 2, 3, 4}
Sign in to answer this quiz and track your learning progress
And as an unordered data type, they can’t be indexed.
s = {1, 2, 3}
s[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing
set add and update
Using the add() method we can add a single element to the set.
# add() method: add a single element to the set
s = {1, 2, 3}
s.add(4) # Add element 4
s
{1, 2, 3, 4}
And with update(), multiple ones:
# update() method: add multiple elements from an iterable
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6]) # Add multiple elements (duplicates ignored)
s
{1, 2, 3, 4, 5, 6}
set remove and discard
Both methods will remove an element from the set, but remove() will raise a key error if the value doesn’t exist.
# remove() method: remove element, raises KeyError if not found
s = {1, 2, 3}
s.remove(3) # Remove element 3
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 3
discard() won’t raise any errors.
# discard() method: remove element, no error if not found
s = {1, 2, 3}
s.discard(3) # Remove element 3 (safe, no error if missing)
s
{1, 2}
s.discard(3)
Sign in to answer this quiz and track your learning progress
remove() and discard() methods for sets?remove() removes one element, discard() removes allremove() raises an error if element doesn't exist, discard() does notremove() is fasterset union
union() or | will create a new set with all the elements from the sets provided.
# union(): combine all elements from multiple sets (no duplicates)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2) # or 's1 | s2' - returns {1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
set intersection
intersection() or & will return a set with only the elements that are common to all of them.
# intersection(): return elements common to all sets
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3) # or 's1 & s2 & s3' - returns {3}
{3}
Sign in to answer this quiz and track your learning progress
intersection() return for sets?set difference
difference() or - will return only the elements that are unique to the first set (invoked set).
# difference(): return elements in first set but not in others
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.difference(s2) # or 's1 - s2' - returns {1}
{1}
s2.difference(s1) # or 's2 - s1'
{4}
set symmetric_difference
symmetric_difference() or ^ will return all the elements that are not common between them.
# symmetric_difference(): return elements in either set, but not both
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2) # or 's1 ^ s2' - returns {1, 4}
{1, 4}
Sign in to answer this quiz and track your learning progress
symmetric_difference() return for two sets?