DEV Community

Yuvraj Singh Jadon
Yuvraj Singh Jadon

Posted on • Edited on

1 1

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.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more