基于函数的列表对称差集

在对两个列表的每个元素应用提供的函数后,返回它们的对称差集。

  • 通过将fn应用于每个列表中的每个元素创建一个set
  • 使用列表推导式和fn结合使用,只保留另一个列表的先前创建的集合中不包含的值。
def symmetric_difference_by(a, b, fn):
  (_a, _b) = (set(map(fn, a)), set(map(fn, b)))
  return [item for item in a if fn(item) not in _b] + [item
          for item in b if fn(item) not in _a]

from math import floor

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