基于函数的列表并集

Beginner

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

简介

在 Python 中,我们可以使用 set() 函数来获取两个列表的并集。然而,有时我们需要在获取并集之前对两个列表中的每个元素应用一个函数。在这个挑战中,你将创建一个函数,该函数根据提供的函数返回两个列表的并集。

基于函数的列表并集

编写一个函数 union_by(a, b, fn),它接受两个列表 ab,以及一个函数 fn。该函数应返回一个列表,其中包含在对两个列表中的每个元素应用提供的函数后,两个列表中任意一个列表中出现过的每个元素,且每个元素只出现一次。

要解决这个问题,你可以按照以下步骤进行:

  1. a 中的每个元素应用 fn,创建一个集合。
  2. b 使用列表推导式并结合 fn,只保留不在先前创建的集合 _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]

总结

在这个挑战中,你学习了如何创建一个函数,该函数根据提供的函数返回两个列表的并集。你还学习了如何对列表中的每个元素应用一个函数、从列表创建一个集合以及将集合转换为列表。