Getting started with Python List Comprehension
Tags: programming, python, beginners, tutorial
Published: 2021-11-09 18:11:50

### To know the importance of Comprehension in Python, first we have to understand what is Comprehension?

## List Comprehension
List Comprehension is defined as an elegant way to define, create a list in Python and consists of brackets that contains an expression followed by for clause. It is efficient in both computationally and in terms of coding space and time.

Syntax :- The list comprehension starts with '[' and ']'.
          [ expression for item in list if conditional ]

**Let's learn it with the help examples**

**Example 1:**
Suppose you have generate a list of square over a range of values
first ,you will try to do it with using for loop

#### Using For Loop
```
>>> lst = []
>>> for i in range(1,11):
...     lst.append(i**2)
...
>>> lst
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

```

do this way will definately do the job but, here we can make use of list comprehension to make this a one liner, let's see

#### Using List comprehension 
```
>>> lst = [i**2 for i in range(1,11)]
>>> lst
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
```
in the above , the left most expression will be evaluated and store in the list for every value in the for loop

###Conditionals in List Comprehension
We can also add conditional statements to the list comprehension. 
to store values in the list based wheather the condition is *True* or *False*,  We can create a list using range(), operators, etc.
let's understand this with an example.

*Syntax*: newlist = [expression for item in iterable if condition == True]

**Example 2:**
Suppose there are  students in a class and you have to filter the student names based on the performance in the exam, you have a *dict* of students with key as there name and value as there marks
So, if a student get marks greater than or equal to 40 then he/she will be included in the list else he/she will not be included.

First we will try to do it with for loop, then
using list comprehension

#### Using For loop 

```
>>> students = {'ram':44,'shyam':22,'harry':75,'john':54,'robert':25,'seta':65,'max':23,'harry':75,'robin':24,'philip':56}
>>> selected_students = []
>>> for student,marks in students.items():
...     if marks >= 40:
...             selected_students.append(student)
...
>>> selected_students
['ram', 'harry', 'john', 'seta', 'philip']
>>>
```

#### Using List comprehension
```
>>> students = {'ram':44,'shyam':22,'harry':75,'john':54,'robert':25,'seta':65,'max':23,'harry':75,'robin':24,'philip':56}

>>> selected_students = [student for student,marks in students.items() if marks >= 40]

>>> selected_students
['ram', 'harry', 'john', 'seta', 'philip']
```

With the help of list comprehension we have achived the same task with the same Ridability

### Nested List Comprehensions
Nested List Comprehensions are nothing but a list comprehension within another list comprehension which is quite similar to nested for loops. let's understand it with an example.

### Example 3:-
Suppose you have to generate a matrix where each row contain value from 1 to 4, we will try to do it using for loop then using nestd list comprehensions

#### Using For loop
```
>>> for i in range(3):
...
...     # Append an empty sublist inside the list
...     matrix.append([])
...
...     for j in range(5):
...         matrix[i].append(j)
...
>>> matrix
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
```

#### Using Nested List Comprehensions
```
>>> matrix = [[i for i in range(5)] for _ in range(3)]
>>> matrix
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
```


### Dictionary Comprehension 
Just like we use list comprehension ,in the similar way we can also create dictionary in one or two line instead of writing  extra line . we use *{* , *}* instead of *[* , *]* braces,
all the other syntax is similar.
let's understand with the example

### Example 4:-
you have given a lits of fruits and list list of calories corresponding to each of the fruits , now you have to generate a *dict* of fruits with 
*key* as name of the fruit
*value* as it calories it has

#### Using For loop 
```
>>>
>>> fruits = ["apple","pineapple","banana","orange","papaya","strawberry","grapes","watermalon"]
>>> calories = [100,141,65,43,120,80,110,200]
>>> fruit_dict = {}
>>> for i in range(len(fruits)):
...     fruit_dict[fruits[i]] = calories[i]
...
>>> fruit_dict
{'apple': 100, 'pineapple': 141, 'banana': 65, 'orange': 43, 'papaya': 120, 'strawberry': 80, 'grapes': 110, 'watermalon': 200}
```

#### Using Dict Comprehension 
```
>>> fruits = ["apple","pineapple","banana","orange","papaya","strawberry","grapes","watermalon"]
>>> calories = [100,141,65,43,120,80,110,200]
>>> fruits_dict = { fruits[i]:calories[i] for i in range(len(fruits))}
>>> fruits_dict
{'apple': 100, 'pineapple': 141, 'banana': 65, 'orange': 43, 'papaya': 120, 'strawberry': 80, 'grapes': 110, 'watermalon': 200}
```

Use can also Use Condtional Statement in *Dict* Comprehension as we used in *List* Comprehension 
let's take small example

### Example 5 :-
We will added a student name and his marks based on wheather he/she has got marks greater than or equal to 40 , Refer to example 4.

#### Using For loop  

```
>>> students = {'ram':44,'shyam':22,'harry':75,'john':54,'robert':25,'seta':65,'max':23,'harry':75,'robin':24,'philip':56}
>>> selected_students_dict = {}
>>> for student,marks in students.items():
...     if marks >= 40:
...             selected_students_dict[student] = marks
...
>>> selected_students_dict
{'ram': 44, 'harry': 75, 'john': 54, 'seta': 65, 'philip': 56}
```

#### Using Dict Comprehension

```
>>> students = {'ram':44,'shyam':22,'harry':75,'john':54,'robert':25,'seta':65,'max':23,'harry':75,'robin':24,'philip':56}
>>> selected_students_dict = {student:marks for student,marks in students.items() if marks >= 40}
>>> selected_students_dict
{'ram': 44, 'harry': 75, 'john': 54, 'seta': 65, 'philip': 56}
```
 

Now we have come to an end , the above examples will be enough for you to started with list comprehension , after all it one of the most powerful features of python that every pythonista must now,
i'm added some key takeways below. All the best for your future python explorations :-)


###Key Takeawys
-> **List comprehension is an elegant way to define and create lists based on existing lists.**

-> **List comprehension is generally more compact and faster than normal functions and loops for creating list.**

-> **we should avoid writing very long list comprehensions in one line to ensure that code is user-friendly.**

-> **every list comprehension can be rewritten in for loop, but every for loop can’t be rewritten in the form of list comprehension.**