# Python set

Python set tutorial presents the Python set collection. We show how to create sets and perform operations on them.

## Python set

A Python set is an unordered collection of data with no duplicate elements. A set supports operations like union, intersection, or difference, known from Mathematics.

## Python set literal

Since Python 2.6 it is possible to create sets with literal notation. We use curly brackets to define a set in Python and the elements are separated with the comma character.

#!/usr/bin/python3 nums = { 1, 2, 2, 2, 3, 4 } print(type(nums)) print(nums)

The example creates a Python set with literal notation.

nums = { 1, 2, 2, 2, 3, 4 }

A set is a collection of unique elements; even though we have provided value 2 three times, the set will contain only one 2.

$ ./python_set_literal.py <class 'set'> {1, 2, 3, 4}

This is the output.

## Python set function

The Python `set()`

function creates a new set whose elements
are taken from an iterable. An iterable is an object we can iterate over; such
as a string or a list.

#!/usr/bin/python3 seasons = ["spring", "summer", "autumn", "winter"] myset = set(seasons) print(myset)

In the example, we create a set from a list with the `set()`

built-in function.

$ ./python_set_fun.py {'summer', 'autumn', 'winter', 'spring'}

This is the output.

## Python set membership testing

The `in`

and `not in`

operators test for
the existence of an element in the set.

#!/usr/bin/python3 words = { "spring", "table", "cup", "bottle", "coin" } word = 'cup' if (word in words): print("{0} is present in the set".format(word)) else: print("{0} is not present in the set".format(word)) word = 'tree' if (word not in words): print("{0} is not present in the set".format(word)) else: print("{0} is present in the set".format(word))

We check if two words are present in the set with the membership operators.

$ ./python_set_membership.py cup is present in the set tree is not present in the set

This is the output.

## Python set built-in functions

There are several built-in Python functions, such as `len()`

, or `min()`

,
that can be used on Python sets.

#!/usr/bin/python3 nums = { 21, 11, 42, 29, 22, 71, 18 } print(nums) print("Number of elements: {0}".format(len(nums))) print("Minimum: {0}".format(min(nums))) print("Maximum: {0}".format(max(nums))) print("Sum: {0}".format(sum(nums))) print("Sorted elements:") print(sorted(nums))

In the example we apply five built-in functions on a set of integer values.

print("Number of elements: {0}".format(len(nums)))

The `len()`

method returns the number of elements in the set.

print("Minimum: {0}".format(min(nums)))

The `min()`

method returns the minimum value in the set.

print("Maximum: {0}".format(max(nums)))

The `max()`

method returns the maximum value in the set.

print("Sum: {0}".format(sum(nums)))

The `sum()`

method returns the summation of values in the set.

print(sorted(nums))

Finally, with the `sorted()`

method, we can create a sorted list
from the set, which is unordered.

$ ./python_set_builtins.py {71, 42, 11, 18, 21, 22, 29} Number of elements: 7 Minimum: 11 Maximum: 71 Sum: 214 Sorted elements: [11, 18, 21, 22, 29, 42, 71]

This is the output.

## Python set iteration

A Python set can be iterated with a for loop.

#!/usr/bin/python3 words = { "spring", "table", "cup", "bottle", "coin" } for word in words: print(word)

In the example, we go through the set and print its elements one by one.

$ ./python_set_iteration.py table cup coin spring bottle

This is the output.

## Python set add

The Python set `add()`

method adds a new element to the
set.

#!/usr/bin/python3 words = { "spring", "table", "cup", "bottle", "coin" } words.add("coffee") print(words)

We have a set of words. We add a new word with the `add()`

method.

$ ./python_set_add.py {'table', 'coffee', 'coin', 'spring', 'bottle', 'cup'}

This is the output.

## Python set update

The Python set `update()`

method adds one or more iterables
to the set.

#!/usr/bin/python3 words = { "spring", "table", "cup", "bottle", "coin" } words.add("coffee") print(words) words2 = { "car", "purse", "wind" } words3 = { "nice", "prime", "puppy" } words.update(words2, words3) print(words)

We have three sets of words. We add the second and third set to the
first set with the `update()`

method.

$ ./python_set_update.py {'spring', 'bottle', 'cup', 'coin', 'purse', 'wind', 'nice', 'car', 'table', 'prime', 'puppy'}

This is the output.

## Python set remove

Python has two basic methods for removing elements: `remove()`

and
`discard()`

. The `remove()`

method removes the specified
element from the set and raises `KeyError`

if the element is not in
the set. The `discard()`

method removes an element from the set and does
nothing if the element to be removed is not in the set.

#!/usr/bin/python3 words = { "spring", "table", "cup", "bottle", "coin" } words.discard("coin") words.discard("pen") print(words) words.remove("cup") try: words.remove("cloud") except KeyError as e: pass print(words)

In the example, we delete set elements with `remove()`

and
`discard()`

.

try: words.remove("cloud") except KeyError as e: pass

If we did not catch the `KeyError`

, the script would terminate
without executing the last statement.

$ ./python_set_remove.py {'table', 'cup', 'bottle', 'spring'} {'table', 'bottle', 'spring'}

This is the output.

## Python set pop & clear

The `pop()`

method removes and returns an arbitrary element
from the set. The `clear()`

method removes all elements from
the set.

#!/usr/bin/python3 words = { "spring", "table", "cup", "bottle", "coin", "pen", "water" } print(words.pop()) print(words.pop()) print(words) words.clear() print(words)

In the example, we delete and print two random elements and show the
remaining elements. Then we remove all elements from the set with `clear()`

.

$ ./python_set_remove2.py water pen {'cup', 'spring', 'table', 'bottle', 'coin'} set()

This is the output.

## Python set operations

With Python sets we can perform specific operations: union, intersection, difference, and symmetric difference.

#!/usr/bin/python3 set1 = { 'a', 'b', 'c', 'c', 'd' } set2 = { 'a', 'b', 'x', 'y', 'z' } print("Set 1:", set1) print("Set 2:", set2) print("intersection:", set1.intersection(set2)) print("union:", set1.union(set2)) print("difference:", set1.difference(set2)) print("symmetric difference:", set1.symmetric_difference(set2))

The example shows four set operations.

print("intersection:", set1.intersection(set2))

The `intersection()`

method carries out the intersection operation, which
returns elements that are both in `set1`

and `set2`

.

print("union:", set1.union(set2))

The `union()`

method carries out the union operation,
which returns all elements from both sets.

print("difference:", set1.difference(set2))

The `difference()`

method carries out the difference operation, which returns
elements that are in the `set1`

but not in `set2`

.

print("symmetric difference:", set1.symmetric_difference(set2))

The `symmetric_difference()`

method carries out the symmetric difference
operation, which returns elements that are in `set1`

or `set2`

, but not in both.

$ ./python_set_operations.py Set 1: {'c', 'b', 'a', 'd'} Set 2: {'y', 'b', 'a', 'x', 'z'} intersection: {'b', 'a'} union: {'b', 'a', 'z', 'c', 'x', 'y', 'd'} difference: {'c', 'd'} symmetric difference: {'z', 'c', 'x', 'y', 'd'}

This is a sample output.

It is possible to perform these operations using &, |, -, and ^ operators.

#!/usr/bin/python3 set1 = { 'a', 'b', 'c', 'c', 'd' } set2 = { 'a', 'b', 'x', 'y', 'z' } print("Set 1:", set1) print("Set 2:", set2) print("intersection:", set1 & set2) print("union:", set1 | set2) print("difference:", set1 - set2) print("symmetric difference:", set1 ^ set2)

The example shows four set operations using operators.

## Subsets and supersets

If all elements of set A are contained withing set B, A is called a subset of B and B a superset of A.

#!/usr/bin/python3 set1 = { 'a', 'b', 'c', 'd', 'e' } set2 = { 'a', 'b', 'c' } set3 = {'x', 'y', 'z' } if (set2.issubset(set1)): print("set1 is a subset of set2") if (set1.issuperset(set2)): print("set1 is a superset of set2") if (set2.isdisjoint(set3)): print("set2 and set3 have no common elements")

In the example, we use `issubset()`

, `issuperset()`

,
and `isdisjoint()`

methods.

if (set2.issubset(set1)): print("set1 is a subset of set2")

With the `issubset()`

method we check if `set2`

is a subset of `s1`

.

if (set1.issuperset(set2)): print("set1 is a superset of set2")

With the `issuperset()`

method we check if `set1`

is a superset of `s2`

.

if (set2.isdisjoint(set3)): print("set2 and set3 have no common elements")

With the `isdisjoint()`

method we check if `set2`

and `set3`

have no
common elements.

$ ./python_subset_superset.py set1 is a subset of set2 set1 is a superset of set2 set2 and set3 have no common elements

This is the output.

## Python immutable sets

Immutable sets (sets that cannot be modified) are created with the `frozenset()`

function.

>>> s1 = frozenset(('blue', 'green', 'red')) >>> s1 frozenset({'red', 'green', 'blue'}) >>> s1.add('brown') Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add'

There is an error when we try to add a new element to a frozen set.

In this tutorial, we have worked with the Python set collection.

You might also be interested in the following related tutorials: Python tutorial, Python lambda functions, Python for loop, Python list comprehensions, Python map tutorial, Openpyxl tutorial, Python requests tutorial, and Python CSV tutorial.