Diferencia simétrica basada en función

PythonPythonBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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:

  1. Crea un set aplicando fn a cada elemento de cada lista.
  2. Utiliza una comprensión de lista en combinación con fn en cada una de ellas para conservar solo los valores no contenidos en el set previamente creado de la otra.
  3. Concatena las dos listas obtenidas en el paso 2.

La función debe tener los siguientes parámetros:

  • a: una lista de elementos
  • b: una lista de elementos
  • fn: 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.