基于函数的列表合并

在对两个列表的每个元素应用提供的函数后,返回存在于任一列表中的每个元素。

  • 通过将函数 fn 应用于列表 a 中的每个元素创建一个 set
  • 使用列表推导式结合 fn 在列表 b 上,仅保留之前创建的 _a 集合中不包含的值。
  • 最后,从前面的结果和列表 a 创建一个 set,并将其转换为一个 list
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]