DEV Community

Yuvraj Singh Jadon
Yuvraj Singh Jadon

Posted on • Edited on

Comprehensions in Python | Explained

What is comprehension?

Comprehensions are a concise notation for performing some operation for a collection of elements, and/or selecting a subset of them that meet some condition.

Types of Comprehensions:

  • List Comprehensions.

  • Dict Comprehensions.

  • Set Comprehensions.

Simply Put, you can use comprehensions to define new Sequences(List, Dict, Set) from existing once in an elegant way.

Let's see comprehensions in Action.

List Comprehensions

  • Suppose, you want to create a list with the squares of the first 10 natural numbers.

You can do this using a for loop like this:

 squares = [] for n in range(10): squares.append(n * n) print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
Enter fullscreen mode Exit fullscreen mode

You can perform the same thing using list comprehensions in a much more elegant and concise way:

 squares = [n * n for n in range(10)] print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
Enter fullscreen mode Exit fullscreen mode

Same result!!

Basically we have put a for loop within square brackets.

  • You can also use an if condition inside of comprehension.

Let's select the even numbers from the square list we just created:

 squares = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] even_nums = [num for num in squares if not num % 2] print(even_nums) # [0, 4, 16, 36, 64] 
Enter fullscreen mode Exit fullscreen mode

Quite neat! isn't it?

  • Nested Comprehensions: You can use multiple for loop inside a comprehension.

Suppose you want to create a matrix from two lists:

Using for loop:

 matrix = [] for a in range(3): for b in range(3): matrix.append([a, b]) print(matrix) """ Output: [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] """ 
Enter fullscreen mode Exit fullscreen mode

Using list comprehension:

 matrix = [[a, b] for a in range(3) for b in range(3)] print(matrix) """ Output: [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]] """ 
Enter fullscreen mode Exit fullscreen mode

From 4 lines to 1 line!!

Note: for loop over b has a dependency on a, it must follow the for loop over a in the comprehension.

Set Comprehensions

Set comprehension work exactly like list comprehension, only there is a little difference in the syntax.

name = "Harry" letters1 = set(c for c in name) # First way using set() letters2 = {c for c in name} # Second way using {} print(letters1) # {'H', 'y', 'a', 'r'} print(letters2) # {'H', 'y', 'a', 'r'} 
Enter fullscreen mode Exit fullscreen mode

Dict Comprehensions

Dict comprehension is similar to list and set comprehensions but it requires a key: value pair instead of single values.

d1 = dict((k, v) for k, v in enumerate("Hello", 1)) print(d1) # {1: 'H', 2: 'e', 3: 'l', 4: 'l', 5: 'o'} d2 = {k: v for k, v in enumerate("Bye", 1)} print(d2) # {1: 'B', 2: 'y', 3: 'e'} 
Enter fullscreen mode Exit fullscreen mode

Note:

  • enumerate function returns a key: value pair using the iterable passed to it and the start value.
  • Dictionaries do not allow duplication in the keys.

Thanks

You may also like:

Connect with me on Twitter, GitHub, and LinkedIn.

Top comments (0)