---
# System prepended metadata

title: 'ASIX M3. [UF2]. Map, reduce i filter.'
tags: [' programació modular', ' funcions', ' programació', asix]

---

---
title: ASIX M3. [UF2]. Map, reduce i filter.
tags: asix, programació, funcions, programació modular
---

# ASIX1 M03: Programació bàsica
[vincle a font en MarkDown](https://hackmd.io/@JdaXaviQ/H1zGckL-q)

---
# Map, filter i reduce.
## Map
**Map:** aplica una funció a tots els ítems d'una col·lecció de forma individual, retornant un __iterador__ amb el resultat.

Per exemple, podem aplicar la funció map per a obtenir la longitud d'una col·lecció de paraules:


```python
paraules = ["gat", "hipopòtam", "flor", "quàdriceps"]
longituds = list(map(len, paraules))
for index in range(len(paraules)):
    print(f"{index:<5}{paraules[index]:20}{longituds[index]:>3}")
```

    0    gat                   3
    1    hipopòtam             9
    2    flor                  4
    3    quàdriceps           10


## Reduce
**Reduce:** Combina una col·lecció d'ítems en un de sol.

Necessitem importar les '*functools*'.

Per exemple, podem utilitzar reduce per a sumar una col·lecció de nombres:


```python
import functools
nombres = [1,4,5,6,7]
suma = functools.reduce(lambda a, x: a+x,nombres)
print(f"{suma=}")
```

    suma=23


## Filter
**Filter:** Retorna els ítems d'una col·lecció que produeixen un True quan els passem per la funció.
Per exemple si volem tria els noms que comencen per la lletra 'A':


```python
noms = ['Anna', 'Francesc', 'Gerard', 'Antoni', 'Greta', 'Alicia', 'Alex']
comencen_per_A = [nom for nom in filter(lambda n: n[0]=='A', noms)]
print(comencen_per_A)
```

    ['Anna', 'Antoni', 'Alicia', 'Alex']
