# Day 08 - Comprehensions¶

The Python Comprehensions allow us in a clear and simple way, create sequences from other sequences, these work in a similar way to the filter and map functions.

Types of compressions:

• list comprehensions
• dictionary comprehensions
• set comprehensions

## List Comprehensions¶

We can create lists in a clear way, the list comprehension structure is:

```new_list = [output for i in sequence if condition]
```

Almost all the comprehensions work in a similar way depending on the type of structure we need to obtain.

• `new_list`: The variable which will contain the list.
• `output`: The output of every element in the list.
• `i`: Value in the sequence.
• `condition`: (optional) Comprehensions can have conditions to decide which value it will keep.

### Common Example¶

```totals = []
for number in range(1, 6):
totals.append(number * 2)

print(totals)
```

We can perform this same action with the map function as we saw before, however this time we will use comprehension:

```totals = [number * 2 for number in range(1, 6)]
print(totals)

# Output:
# [2, 4, 6, 8, 10]
```

It works exactly the same, now how about filtering out just odd numbers?

Remember that we can add a conditional, if it is satisfied, the value will be kept in the new sequence

```totals = [number * 2 for number in range(1, 6) if number % 2 != 0]
print(totals)

# Output:
# [2, 6, 10] -> 1, 3, 5 (odd numbers)
```

## Dict Comprehensions¶

They work in a similar way, we just have to take into account, the type of braces that are used and the format of the dictionaries `key: value`

```new_dict = {output_key: output_value for i in sequence if condition}
```

We will use a list of numbers and create a dictionary in which its key will be the real number and its value will be the number multiplied by itself.

```new_dict = {}
numbers = [5, 8, 2, 6, 3]
for number in numbers:
new_dict[number] = number * number

print(new_dict)

# Output:
# {5: 25, 8: 64, 2: 4, 6: 36, 3: 9}
```

### Comprehension¶

```numbers = [5, 8, 2, 6, 3]
new_dict = {number: number * number for number in numbers}
print(new_dict)

# Output:
# {5: 25, 8: 64, 2: 4, 6: 36, 3: 9}
```

In this example we can also use conditionals, the same way we can work with other types of data such as sets or generators.

Go to the Challenge

Go to the Solution