> For the complete documentation index, see [llms.txt](https://ricardomol.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ricardomol.gitbook.io/notes/backend/python/comprehensions.md).

# Comprehensions

## Comprehensions

Constructs that **allow sequences to be built** from other sequences.

Several types of comprehensions are supported:

* **list** comprehensions
* **dictionary** comprehensions
* **set** comprehensions
* **generator** comprehensions

## &#x20;`list` comprehensions

**Short way to create lists**.

**Square brackets**

**Blueprint**

```python
variable = [out_exp for out_exp in input_list if out_exp == 2]
```

Example:

```python
multiples = [i for i in range(30) if i % 3 == 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] 
```

Example with for loop:

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

Example with list comprehensions:

```python
squared = [x**2 for x in range(10)]
```

## &#x20;`dict` comprehensions

**Short way to create dicts**

**Curly braces `{}`**

Example:

```python
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}

mcase_frequency = {
    k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0)
    for k in mcase.keys()
}

# mcase_frequency == {'a': 17, 'z': 3, 'b': 34}
```

In the above example we are combining the values of keys which are same but in different typecase.

Example: switch keys and values of a dictionary:

```python
{v: k for k, v in some_dict.items()}
```

## `set` comprehensions

**Short way to create sets**

Curly braces `{}`.&#x20;

Example:

```python
squared = {x**2 for x in [1, 1, 2]}
print(squared)
# Output: {1, 4}
```

## `generator` comprehensions

They **don’t allocate memory for the whole list but generate one item at a time**.

More **memory efficient**.

Example:

```python
multiples_gen = (i for i in range(30) if i % 3 == 0)
print(multiples_gen)
# Output: <generator object <genexpr> at 0x7fdaa8e407d8>
for x in multiples_gen:
  print(x)
  # Outputs numbers
```
