Introduction
In Python, the symmetric difference between two lists is a new list containing all elements that are in either of the original lists, but not in both. In this challenge, we will write a function that returns the symmetric difference between two lists, after applying the provided function to each list element of both.
Symmetric Difference Based on Function
Write a function symmetric_difference_by(a, b, fn) that takes in two lists a and b, and a function fn. The function should return a new list containing all elements that are in either of the original lists, but not in both, after applying the provided function to each list element of both.
To solve this problem, you can follow these steps:
- Create a
setby applyingfnto each element in every list. - Use a list comprehension in combination with
fnon each of them to only keep values not contained in the previously created set of the other. - Concatenate the two lists obtained in step 2.
The function should have the following parameters:
a: a list of elementsb: a list of elementsfn: a function that takes an element and returns a new value
The function should return a new list containing all elements that are in either of the original lists, but not in both, after applying the provided function to each list element of both.
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]
Summary
In this challenge, we learned how to write a function that returns the symmetric difference between two lists, after applying the provided function to each list element of both. We used a set and list comprehension to achieve this.