基于函数的列表交集

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

  • 使用map()函数将fn应用于b中的每个元素,创建一个set
  • 结合a上的列表推导式和fn,只保留两个列表中包含的值。
def intersection_by(a, b, fn):
  _b = set(map(fn, b))
  return [item for item in a if fn(item) in _b]

from math import floor

intersection_by([2.1, 1.2], [2.3, 3.4], floor) # [2.1]