Python Set Comprehension
Python Sets are datatypes in Python which allows us to store data in an unordered collection of elements.
This chapter will discuss the Set Comprehension.
What is Set Comprehension in Python?
Set Comprehension is an elegant and concise way to create a new Set from an existing Set in Python.
For example, make a set with each element multiplied by 10:
mult = {10 * x for x in range(10)}
print(mult) # {0, 70, 40, 10, 80, 50, 20, 90, 60, 30}
and this code is equivalent to:
mult = set()
for x in range(10):
mult.add(10 * x)
print(mult)
How to use Set Comprehension
The syntax for Set comprehension is:
new_set = {expression for item in iterable if condition}
where:
- The
expressionis the current item in the iteration, but it is also the result, which can be manipulated before it ends up as a set item in the new set - The
iterablecan be any iterable object, like a list, tuple, set etc. - The
conditionis like a filter that only accepts the items that valuate toTrue.
The return value is a new set, leaving the old set unchanged.
Conditionals in Set Comprehension
You can add one or more conditions to the Set Comprehension.
If Conditional Set Comprehension
Example with only one if in the set comprehension, where the new set will be populated only with even numbers.
numbers = {x for x in range(20) if x % 2 == 0}
print(numbers)
Output
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
Multiple if Conditional Set Comprehension
Example with multiple if in Set comprehension where only elements divisible by 2 and 5 are added to the new Set:
numbers = {y for y in range(100) if y % 2 == 0 if y % 5 == 0}
print(numbers)
Output
{0, 10, 20, 30, 40, 50, 60, 70, 80, 90}
Multiple if in the Set Comprehension are equivalent to and operation where both conditions have to be true.
if-else Conditional Set Comprehension
Example with if-else in List Comprehension where elements divisible by 2 have the value even while others have the value odd.
numbers = {i if i%2==0 else i+1 for i in range(10)}
print(numbers)
Output
{0, 2, 4, 6, 8, 10}
if-else in the List Comprehension are equivalent to if-else flow control.