基于函数的列表差异

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在 Python 中,我们可以使用内置的 set() 函数轻松找到两个列表之间的差异。但是,如果我们想基于应用于两个列表中每个元素的特定函数来找到差异呢?在这个挑战中,你将创建一个函数,该函数接受两个列表和一个函数,并在将提供的函数应用于两个列表的每个元素后返回两个列表之间的差异。

基于函数的列表差异

创建一个名为 difference_by(a, b, fn) 的函数,该函数接受三个参数:

  • a:一个元素列表
  • b:一个元素列表
  • fn:一个将应用于两个列表中每个元素的函数

该函数应返回列表 a 中存在但列表 b 中不存在的元素列表,前提是已将提供的函数 fn 应用于两个列表中的每个元素。

要解决此问题,你可以按以下步骤操作:

  1. 使用 map()fn 应用于 b 中的每个元素,创建一个集合。
  2. a 使用列表推导式并结合 fn,只保留不在先前创建的集合 _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 } ]

总结

在这个挑战中,你已经学会了如何基于应用于两个列表中每个元素的特定函数来找到两个列表之间的差异。你还练习了使用 map()set() 和列表推导式来解决这个问题。