基于函数的列表差异

在对两个列表的每个元素应用提供的函数后,返回两个列表之间的差异。

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

from math import floor

difference_by([2.1, 1.2], [2.3, 3.4], floor) # [1.2]
difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x'])
# [ { x: 2 } ]