List comprehensions provide a way to create lists, where each element will be derived from an operation applied to each member of another sequence or iterable or to create another a subsequence with elements that satisfy particular condition.

## Use-case 1: Lets calculate squares of all numbers from 1 to 10

Without List Comprehension:

```
squares = []
for x in range(10):
squares.append(x**2)
print squares
```

With List Comprehension:

List comprehension consists of square brackets containing an expression followed by a one or multiple for loops or if clauses. Now, lets calculate squares using list comprehension

```
squares = [x**2 for x in range(10)]
print squares
```

## Use-case 2: If the resulting data is a tuple, the expression must be parenthesised.

Example: Lets fetch indices of matching elements from two lists. For example:

first_list = [2, 5, 6]

second_list = [5, 6, 1]

Output : [(1, 0), (2, 1)]

Without List Comprehension:

```
first_list = [2, 5, 6]
second_list = [5, 6, 1]
result = []
for i in range(len(first_list)):
for j in range(len(second_list)):
if first_list[i] == second_list[j]:
result.append((i, j))
print result
```

With List Comprehension:

```
first_list = [2, 5, 6]
second_list = [5, 6, 1]
result = [(i, j) for i in range(len(first_list)) for j in range(len(second_list)) if first_list[i] == second_list[j]]
print result
```

## Use-case 3: Nested list comprehension

Nested list comprehension is a list comprehension within another list comprehension just like nested for loops.

Lets take a popular example of flattening a 2D matrix:

matrix = [[1, 2, 3],

[4, 5, 6],

[7, 8, 9]]

Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

Without List Comprehension:

```
matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
result = []
for row in matrix:
for val in row:
result.append(val)
print result
```

With List Comprehension:

```
matrix = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
result = [val for row in matrix for val in row]
print result
```

`We can use multiple for loops or if clauses to achieve any result but list comprehensions make it very concise and readable.`

Happy Coding! 👨💻

## Discussion