Introducción
En Python, la diferencia simétrica entre dos listas es una nueva lista que contiene todos los elementos que se encuentran en cualquiera de las listas originales, pero no en ambas. En este desafío, escribiremos una función que devuelva la diferencia simétrica entre dos listas, después de aplicar la función proporcionada a cada elemento de ambas listas.
Diferencia simétrica basada en función
Escribe una función symmetric_difference_by(a, b, fn) que tome dos listas a y b, y una función fn. La función debe devolver una nueva lista que contiene todos los elementos que se encuentran en cualquiera de las listas originales, pero no en ambas, después de aplicar la función proporcionada a cada elemento de ambas listas.
Para resolver este problema, puedes seguir estos pasos:
- Crea un
setaplicandofna cada elemento de cada lista. - Utiliza una comprensión de lista en combinación con
fnen cada una de ellas para conservar solo los valores no contenidos en elsetpreviamente creado de la otra. - Concatena las dos listas obtenidas en el paso 2.
La función debe tener los siguientes parámetros:
a: una lista de elementosb: una lista de elementosfn: una función que toma un elemento y devuelve un nuevo valor
La función debe devolver una nueva lista que contiene todos los elementos que se encuentran en cualquiera de las listas originales, pero no en ambas, después de aplicar la función proporcionada a cada elemento de ambas listas.
def symmetric_difference_by(a, b, fn):
(_a, _b) = (set(map(fn, a)), set(map(fn, b)))
return [item for item in a if fn(item) not in _b] + [item
for item in b if fn(item) not in _a]
from math import floor
symmetric_difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2, 3.4]
Resumen
En este desafío, aprendimos cómo escribir una función que devuelva la diferencia simétrica entre dos listas, después de aplicar la función proporcionada a cada elemento de ambas listas. Utilizamos un set y una comprensión de lista para lograr esto.