基于函数的列表差异
在对两个列表的每个元素应用提供的函数后,返回两个列表之间的差异。
- 使用
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 } ]