prompter: Explica'm amb exemples les funcions "map, "filter" i "reduce" de python

assistant: Les funcions "map", "filter" i "reduce" són funcions incorporades en Python que es poden utilitzar per processar llistes i altres estructures de dades.

La funció "map" permet aplicar una funció a cada element d'una llista o altra estructura de dades i retorna una llista amb els resultats. Per exemple, si volem elevar al quadrat tots els elements d'una llista, podem utilitzar la funció "map" així:

def square(x):
    return x**2

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(square, numbers))
print(squared_numbers)
El resultat seria: [1, 4, 9, 16, 25]

La funció "filter" permet filtrar elements d'una llista o altra estructura de dades en funció d'una funció determinada. Per exemple, si volem obtenir tots els nombres parells d'una llista, podem utilitzar la funció "filter" així:


def is_even(x):
    return x % 2 == 0

numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(is_even, numbers))
print(even_numbers)
El resultat seria: [2, 4]

La funció "reduce" permet aplicar una funció binària a la llista de forma iterativa per retornar un únic valor. Per exemple, si volem calcular la suma de tots els elements d'una llista, podem utilitzar la funció "reduce" així:

def add(x, y):
    return x + y

numbers = [1, 2, 3, 4, 5]
sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers)
El resultat seria: 15

Aquestes són algunes de les aplicacions bàsiques de les funcions "map", "filter" i "reduce". Aquestes funcions són útils per processar i manipular dades en Python, i són especialment útils per a llistes i altres estructures de dades complexes.

assistant: "map", "filter" i "reduce" són funcions de Python que es poden utilitzar per a processar llistes d'elements de manera eficient.

"map": La funció "map" aplica una funció donada a cada element d'una llista i retorna un iterable amb els resultats.

"filter": La funció "filter" filtra elements d'una llista en base a una funció donada. Només retorna els elements per a els quals la funció retorna "True".

"reduce": La funció "reduce" aplica una funció binària a la llista d'elements de manera repetitiva per a reduir-los a un únic valor.

assistant: map, filter i reduce apliquen una funció a cada element d'una llista

- map genera una llista d'igual llargada que la inicial amb els resultats de la funció, per exemple si fem servir una funció "quadrat" que calculi el quadrat d'un nombre obtindrem una llista amb els quadrats dels elements inicials
- filter genera una llista que només conté els elements per als quals la funció ha retornat True, per exemple si fem servir una funció "parell" que retorni True quan rep un nombre parell obtindrem una llista que contindrà només els nombres parells de la llista inicial
- reduce genera un únic valor a partir dels elements inicials, la funció rep un paràmetre addicional per ajudar en la computació del resultat final, per exemple si fem servir una funció "suma" que sumi dos elements obtindrem el sumatori dels elements de la llista inicial més el valor addicional

Per exemple:
# Calcula el quadrat d'un nombre
def quadrat(element):
    return element ** 2

# Retorna True si element is parell
def parell(element):
    return element % 2 == 0

# Suma dos nombres
def suma(a, b):
    return a + b

llista = [ 1, 1, 2, 3, 5, 8, 13 ]

print(map(quadrat, llista)) # -> [1, 1, 4, 9, 25, 64, 169]
print(filter(parell, llista))  # -> [2, 8]
print(reduce(suma, llista, 0)) # -> 33