Объединение списков на основе функции

Beginner

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

Введение

В Python мы можем использовать функцию set() для получения объединения двух списков. Однако, иногда нам нужно применить функцию к каждому элементу обоих списков, прежде чем получить объединение. В этом испытании вы создадите функцию, которая возвращает объединение двух списков на основе предоставленной функции.

Объединение списков на основе функции

Напишите функцию union_by(a, b, fn), которая принимает два списка a и b и функцию fn. Функция должна возвращать список, содержащий каждый элемент, который есть в любом из двух списков ровно один раз, после применения предоставленной функции к каждому элементу обоих списков.

Для решения этой проблемы вы можете следовать следующим шагам:

  1. Создайте множество, применяя fn к каждому элементу в a.
  2. Используйте генератор списка в сочетании с fn для b, чтобы оставить только значения, не содержащиеся в ранее созданном множестве, _a.
  3. Наконец, создайте множество из предыдущего результата и 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]

Резюме

В этом испытании вы узнали, как создать функцию, которая возвращает объединение двух списков на основе предоставленной функции. Вы также узнали, как применить функцию к каждому элементу списка, создать множество из списка и преобразовать множество в список.