How To Find The Difference Between Two Or More Sets In Python

How can you find the difference between two sets in Python?

In Python, you can find the difference between two sets using the ``` .difference() ``` method. The ``` set ``` and ``` frozenset ``` objects contain a built-in method labelled ``` difference() ``` which helps to find the non-matching elements in the source object not found in the other sets passed in to the ``` .difference(*others) ``` parameter.

Here is an example demonstrating how to find the difference between two sets using the Python REPL:

``````>>> source_set = {10, 12, 14, 16, 18}
>>> other_set = {12, 16, 18}
>>> source_set.difference(other_set)
{10, 14}``````

As you can see from the above output the ``` source_set ``` is used as the baseline, and any corresponding elements that are found in the ``` other_set ``` are removed, leaving the result of ``` {10, 14} ``` .

Difference Between Multiple Sets

You can add more sets into the ``` .difference() ``` parameters if there are other sets to compare against.

For example, you could compare three sets and find which values remain in the ``` source_set ``` after comparing them against two other sets, as demonstrated below:

``````>>> source_set = {10, 12, 14, 16, 18}
>>> other_set = {12, 16, 18}
>>> third_set = {10}
>>> source_set.difference(other_set, third_set)
{14}``````

As you can see the ``` source_set ``` is compared against each of the sets in the ``` difference() ``` method. The result can never be more than what is in the original ``` source_set ``` .

What if you just wanted to update the ``` source_set ``` rather than produce a new set?

Remove Differences By Updating Source Set

What if you didn’t want to produce a new set but rather wanted to just update the ``` source_set ``` ?

There is another method called ``` .difference_update(*others) ``` which enables this functionality.

Using the previous example above, here’s how this would look in the Python REPL:

``````>>> source_set = {10, 12, 14, 16, 18}
>>> other_set = {12, 14, 16}
>>> source_set.difference_update(other_set)
>>> source_set
{10, 14}``````

As you can see the method performs the necessary task of removing the shared elements from the ``` source_set ``` . If there are multiple sets to compare, you could wrap them all into one parameter as previously done with the ``` .difference(*others) ``` method.

Here’s how this would look applying multiple sets on the ``` source_set ``` :

``````>>> source_set = {10, 12, 14, 16, 18}
>>> other_set = {12, 16, 18}
>>> third_set = {10}
>>> source_set.difference_update(other_set, third_set)
>>> source_set
{14}``````

As you can see, this produces the same outcome and mutates the original ``` source_set ``` variable.

Summary

In Python, you can find the difference between two sets using the ``` .difference() ``` method. The ``` set ``` and ``` frozenset ``` objects contain a built-in method labelled ``` difference(*others) ``` which helps to find the non-matching elements in the source object not found in the other sets passed in to the ``` *others ``` parameter. You can add more sets into the ``` .difference() ``` method if there are other sets to compare against.

If you would prefer to update the original ``` source_set ``` being compared against rather than producing a new set, you could use another method called ``` .difference_update(*others) ``` .

Ryan Sheehy
Ryan has been dabbling in code since the late '90s when he cut his teeth exploring VBA in Excel. Having his eyes opened with the potential of automating repetitive tasks, he expanded to Python and then moved over to scripting languages such as HTML, CSS, Javascript and PHP.