Введение
В Python симметрическая разница между двумя списками - это новый список, содержащий все элементы, которые находятся в одном из исходных списков, но не в обоих. В этом испытании мы напишем функцию, которая возвращает симметрическую разницу между двумя списками, после применения заданной функции к каждому элементу обоих списков.
Симметрическая разница на основе функции
Напишите функцию symmetric_difference_by(a, b, fn), которая принимает два списка a и b и функцию fn. Функция должна возвращать новый список, содержащий все элементы, которые находятся в одном из исходных списков, но не в обоих, после применения заданной функции к каждому элементу обоих списков.
Для решения этой проблемы вы можете следовать следующим шагам:
- Создайте
множество, применяяfnк каждому элементу в каждом списке. - Используйте генератор списка в сочетании с
fnдля каждого из них, чтобы оставить только значения, не содержащиеся в предварительно созданном наборе другого списка. - Объедините два списка, полученных на шаге 2.
Функция должна иметь следующие параметры:
a: список элементовb: список элементовfn: функция, которая принимает элемент и возвращает новое значение
Функция должна возвращать новый список, содержащий все элементы, которые находятся в одном из исходных списков, но не в обоих, после применения заданной функции к каждому элементу обоих списков.
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]
Резюме
В этом испытании мы научились писать функцию, которая возвращает симметрическую разницу между двумя списками, после применения заданной функции к каждому элементу обоих списков. Мы использовали множество и генератор списка, чтобы достичь этого.