Python Set

Python set is immutable.
Python set is unordered values with no duplicates.

empty_set = set() # {} - will not work, because it is a dict

pets = {'dog', 'cat', 'parrot', 'parrot'}
pets_2 = {'dog', 'cat', 'lizzard', 'fish'}

print(pets) # {'parrot', 'cat', 'dog'} (random order, no duplicates)

print(len(pets)) # 3 (no duplicates)

print('Check if element is in the set:')
print('cat' in pets) # True
print('horse' not in pets) # True

print('Add element to the set:')
pets.add('hamster')
print(pets) # {'cat', 'hamster', 'parrot', 'dog'}

print('Get intersection between two sets:')
print(pets.intersection(pets_2)) # {'dog', 'cat'}

print('Get two sets combined (no duplicates):')
print(pets.union(pets_2)) # {'parrot', 'dog', 'hamster', 'cat', 'fish', 'lizzard'}

print('Loop thru items in the set:')
for pet in pets:
    print('Pet item:', pet)

print('Loop thru items in the set with getting element index:')
for pet_index, pet_name in enumerate(pets): # enumerate(pets, start=1) to start from 1
    print('Pet index:', pet_index, ' pet name:', pet_name)

print('Join set items into a string:')
pets_str = '; '.join(pets)
print(pets_str) # dog; cat; parrot

print('Split string into set:')
pets_set = set(pets_str.split('; '))
print(pets_set) # {'cat', 'parrot', 'dog'}

Set operations:

# Sets store ... well sets
empty_set = set()
# Initialize a set with a bunch of values. Yeah, it looks a bit like a dict. Sorry.
some_set = {1, 1, 2, 2, 3, 4}  # some_set is now {1, 2, 3, 4}

# Similar to keys of a dictionary, elements of a set have to be immutable.
invalid_set = {[1], 1}  # => Raises a TypeError: unhashable type: 'list'
valid_set = {(1,), 1}

# Can set new variables to a set
filled_set = some_set

# Add one more item to the set
filled_set.add(5)  # filled_set is now {1, 2, 3, 4, 5}

# Do set intersection with &
other_set = {3, 4, 5, 6}
filled_set & other_set  # => {3, 4, 5}

# Do set union with |
filled_set | other_set  # => {1, 2, 3, 4, 5, 6}

# Do set difference with -
{1, 2, 3, 4} - {2, 3, 5}  # => {1, 4}

# Do set symmetric difference with ^
{1, 2, 3, 4} ^ {2, 3, 5}  # => {1, 4, 5}

# Check if set on the left is a superset of set on the right
{1, 2} >= {1, 2, 3} # => False

# Check if set on the left is a subset of set on the right
{1, 2} <= {1, 2, 3} # => True

# Check for existence in a set with in
2 in filled_set   # => True
10 in filled_set  # => False

Set comprehension

nums = [1,1,2,2,2,3,3,4,5,5,5]
my_set = set()
for n in nums:
    my_set.add(n)

print(my_set) # {1, 2, 3, 4, 5} (unique values)

# copy set using set comprehension
my_set2 = {n for n in nums}
print(my_set2) # {1, 2, 3, 4, 5}

# copy set using set comprehension with if condition
my_set3 = {n for n in nums if n%2==0}
print(my_set3) # {2, 4}

Leave a Comment