简介
在 Python 中,我们可以使用 set() 函数来获取两个列表的并集。然而,有时我们需要在获取并集之前对两个列表中的每个元素应用一个函数。在这个挑战中,你将创建一个函数,该函数根据提供的函数返回两个列表的并集。
在 Python 中,我们可以使用 set() 函数来获取两个列表的并集。然而,有时我们需要在获取并集之前对两个列表中的每个元素应用一个函数。在这个挑战中,你将创建一个函数,该函数根据提供的函数返回两个列表的并集。
编写一个函数 union_by(a, b, fn),它接受两个列表 a 和 b,以及一个函数 fn。该函数应返回一个列表,其中包含在对两个列表中的每个元素应用提供的函数后,两个列表中任意一个列表中出现过的每个元素,且每个元素只出现一次。
要解决这个问题,你可以按照以下步骤进行:
a 中的每个元素应用 fn,创建一个集合。b 使用列表推导式并结合 fn,只保留不在先前创建的集合 _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]
在这个挑战中,你学习了如何创建一个函数,该函数根据提供的函数返回两个列表的并集。你还学习了如何对列表中的每个元素应用一个函数、从列表创建一个集合以及将集合转换为列表。