SETS In Python

In this article we will learn about: 

  • What are Sets? 
  • Creating and Working with Set 
  • Accessing and Traversing Set items 
  • Adding items in Set 
  • Removing/Deleting items from Set 
  • Joining Sets 
  • Frozen Sets 

One of the built-in data structure and part of a collection is SET. The collections that we covered were: Strings, Lists, Tuples and Dictionaries. Now let’s discuss about sets in Python. 

What are Sets in Python

Sets are the collections that are: 

1. Unordered 

Since items in sets might appear in any sequence, you cannot predict it, hence unordered.  

Every time you use a set item, it may appear in a different order. Set items cannot be accessed using an index or key. 

s={10,20,30,40,50,60,70} 
print(s) 

Output

2. Unchangeable 

Although set items cannot be changed, you can take away existing items and add new ones. This means you can add, update and delete items of the sets.  

If you want immutable (fixed and cannot be changed) type of set, you can also make your set as a Frozen Set. We will discuss these too. 

3. Unindexed 

Since they are unordered i.e., they don’t have any specific index or key to identify its items or access them, thus unindexed. 

Creating a Set in Python

There are 2 ways to create a set: 

1. Placing items in curly braces { } 

set_example1={"a","b","c"}  
print(set_example1) 

Output

Note: A set can incorporate any data type you want. 

s1={1,2,3,4,5,6}   
print("Set 1:",s1)  

s2={1.5,2,3.9,"4","abcd",600000,True}   
print("Set 2:",s2) 

Output

2. Using set() constructor 

set_example2= set(("a","b","c"))  
print(set_example2) 

Output

Note: Duplicates are not allowed in Set 

If there is any duplicate item in the set, it will be ignored. For example: 

set_example3= set(("a","b","c","a","c"))  
print(set_example3) 

Output

Check Length of your set by using: len() method 

set_example4={"a","b","c"}  
print(len(set_example4)) 

Output-

Check data type of your set by using: type() method 

set_example5={"a","b","c"}  
print(type(set_example5)) 

Output- <class 'set'> 

Note: empty { } is not an “empty set” 

If you want an empty set, you cannot do s={ }, because this will be considered as an empty dictionary. 

s={} 
print(type(s)) 

Output- <class 'dict'> 

You can create an empty set by using set() method. 

s=set() 
print(type(s)) 

Output- <class 'set'> 

Accessing Set Items

I think you must have figured it out till now, that you cannot access specific items of a set by referring to an index or a key like list or dictionary because sets are unindexed and unordered. 

Traversing through Set Items 

You can easily loop through the set, fetch the items and print the values. For example; 

set_example7={1.5,2,3.9,"4","abcd",600000,True}  
for i in set_example7: 
    print(i) 

Output

Adding Items in Set

There are 2 ways to add or update items in a set: 

1. Using add() method 

Since the sets are unordered, so when we add items to a set it can be anywhere, so no specific place defined.  

set_example8={"a","b","c"}  
print("Before adding:",set_example8) 
set_example8.add("d") 
print("After adding:",set_example8) 

Output

2. Using update() method 

When we want to add items from set to another set, then we use update() method, for example: 

first_set={"a","b","c"} 
second_set={10,20,30} 

print("Before updating:") 
print("First Set:",first_set) 
print("Second Set:", second_set) 

first_set.update(second_set) 

print("After updating:") 
print("First Set:",first_set) 
print("Second Set:",second_set) 

Output

As you can see in the output, update method will add the items in the first set from second set and hence first set is updated with new elements from second set. 

Note: You can even add any iterable item (tuple, list or dictionary) to a set. 

s={"a","b","c","d"} 
s.update([10.6,20,30,40.7]) 
print(s) 

Output- 

Removing/Deleting Items from Set

There are 5 ways to remove items from a set: 

1. Using remove() method 

For removing a specific item from a set we use remove(). 

set_example9={"a","b","c","d","e"}  
print("Before remove:", set_example9)  
set_example9.remove("c") 
print("After remove:", set_example9) 

Output

If the item to be removed does not exist, it will throw an error. 

set_example10={"a","b","c","d","e"}  
set_example10.remove("z") 
print(set_example10) 

Output

2. Using discard() method 

discard() works same as remove(), just the difference is that; even if the item to be removed does not exist, it will not throw any error and will print the existing set. 

set_example10={"a","b","c","d","e"}  
set_example10.discard("z") 
print(set_example10) 

Output

3. Using pop() method 

Logically, pop removes the last item from the set, but since sets are unordered, you will not know which item was removed. 

So, you can use it this way: 

set_example11={"a","b","c","d","e"}  
print("Set before pop:",set_example11)  
find=set_example11.pop() 
print("Deleted element:",find)  
print("Set after pop:",set_example11) 

Output

4. Using clear() method 

You can clear a set using clear() method which can help you print or get a set with no items. For example; 

set_example12={“a”,”b”,”c”} 
print(“Before clear:”, set_example12) 
set_example12.clear() 
print(“After clear:”, set_example12) 

Output

5. Using del keyword 

del keyword will delete the set i.e, set will not exist in memory and will be deleted completely (not defined). 

set_example13={"a","b","c","d","e"}  
print("Set before deletion:",set_example13)  
del set_example13 
print("Set after deletion:",set_example13) 

Output

Joining Sets

There are 4 major operations: 

1. Union 

2. Intersection 

3. Difference

 

4. Symmetric Difference 

1. UNION

Union is joining of 2 sets and displaying all the elements of all the sets together in one set; excluding the duplicates. 

setA={10,20,30,40,50}  
setB={60,70,80,90,100} 
print("Using UNION operator:",setA|setB) 
print("Using UNION method:",setA.union(setB)) 

Output

Note: You can also use update() method for performing the same operation. (Discussed before) 

2. INTERSECTION

Intersection is finding the common elements in both the sets. So, an element which is present in both the sets will be the output of the intersection. 

setA={10,20,30,40,50,60}  
setB={50,60,70,80,90,100} 
print("Using INTERSECTION operator:",setA&setB) 
print("Using INTERSECTION method:",setA.intersection(setB)) 

Output

3. DIFFERENCE

Difference of two sets will return the elements that are not present in both sets. Meaning; 

A-B; it will return the elements present in A and not in B 

B-A; it will return the elements present in B and not in A 

setA={10,20,30,40,50,60}  
setB={50,60,70,80,90,100} 

print("Set A:",setA) 
print("Set B:",setB) 

print("Using DIFFERENCE operator (A-B):",setA-setB) 
print("Using DIFFERENCE method (A-B):",setA.difference(setB)) 

print("Using DIFFERENCE operator (B-A):",setB-setA) 
print("Using DIFFERENCE method (B-A):",setB.difference(setA)) 

Output

4. SYMMETRIC DIFFERENCE

You can consider this as opposite of intersection. So, apart from the common elements in both the sets it will return all other elements and will join the sets too. 

In other words, only the elements that are absent from both sets will be returned. 

setA={10,20,30,40,50,60}  
setB={50,60,70,80,90,100} 
print("Using SYMMETRIC DIFFERENCE operator:",setA^setB) 
print("Using SYMMETRIC DIFFERENCE method:",setA.symmetric_difference(setB)) 

Output

FROZEN SETS 

As discussed before, if you want immutable (fixed and cannot be changed) type of set, you can make your set as a Frozen Set. This means you will not be able to add, update or remove items from these kinds of sets.  

Remember, in normal set, you can add, update and delete/remove the items, but in frozen sets, you will not be able to do so. 

To create a frozen set, we will use frozenset() method. 

frozen_setexample = frozenset(["x", "y", "z"])  
print("Frozen Set",frozen_setexample)  

Output

Looks like a normal set?  

Yes, it will, until you try to do any modification. 

frozen_setexample = frozenset(["x", "y", "z"])  
print("Frozen Set:",frozen_setexample)  
frozen_setexample.add("a") 

Output

frozen_setexample = frozenset(["x", "y", "z"])  
print("Frozen Set:",frozen_setexample) 
frozen_setexample.remove("y") 

Output