Introduction
In Python, we can use the set() function to get the union of two lists. However, sometimes we need to apply a function to each element of both lists before getting the union. In this challenge, you will create a function that returns the union of two lists based on a provided function.
List Union Based on Function
Write a function union_by(a, b, fn) that takes in two lists a and b, and a function fn. The function should return a list that contains every element that exists in any of the two lists once, after applying the provided function to each element of both.
To solve this problem, you can follow these steps:
- Create a
setby applyingfnto each element ina. - Use a list comprehension in combination with
fnonbto only keep values not contained in the previously created set,_a. - Finally, create a
setfrom the previous result andaand transform it into alist.
The function should have the following input parameters:
a: a list of elementsb: a list of elementsfn: a function that takes an element and returns a value
The function should return a list of elements.
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]
Summary
In this challenge, you learned how to create a function that returns the union of two lists based on a provided function. You also learned how to apply a function to each element of a list, create a set from a list, and transform a set into a list.