Введение
В Python мы можем использовать функцию set() для получения объединения двух списков. Однако, иногда нам нужно применить функцию к каждому элементу обоих списков, прежде чем получить объединение. В этом испытании вы создадите функцию, которая возвращает объединение двух списков на основе предоставленной функции.
Объединение списков на основе функции
Напишите функцию union_by(a, b, fn), которая принимает два списка a и b и функцию fn. Функция должна возвращать список, содержащий каждый элемент, который есть в любом из двух списков ровно один раз, после применения предоставленной функции к каждому элементу обоих списков.
Для решения этой проблемы вы можете следовать следующим шагам:
- Создайте
множество, применяяfnк каждому элементу вa. - Используйте генератор списка в сочетании с
fnдляb, чтобы оставить только значения, не содержащиеся в ранее созданном множестве,_a. - Наконец, создайте
множествоиз предыдущего результата иaи преобразуйте его всписок.
Функция должна иметь следующие параметры ввода:
a: список элементовb: список элементовfn: функция, которая принимает элемент и возвращает значение
Функция должна возвращать список элементов.
def union_by(a, b, fn):
_a = set(map(fn, a))
return list(set(a + [item for item in b if fn(item) not in _a]))
from math import floor
union_by([2.1], [1.2, 2.3], floor) ## [2.1, 1.2]
Резюме
В этом испытании вы узнали, как создать функцию, которая возвращает объединение двух списков на основе предоставленной функции. Вы также узнали, как применить функцию к каждому элементу списка, создать множество из списка и преобразовать множество в список.