基于函数的列表合并
在对两个列表的每个元素应用提供的函数后,返回存在于任一列表中的每个元素。
- 通过将函数
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]