简介
在 Python 中,两个列表的对称差是一个新列表,它包含原始列表中任意一个列表里的所有元素,但不包含两个列表都有的元素。在这个挑战中,我们将编写一个函数,该函数在对两个列表的每个元素都应用了提供的函数之后,返回这两个列表的对称差。
在 Python 中,两个列表的对称差是一个新列表,它包含原始列表中任意一个列表里的所有元素,但不包含两个列表都有的元素。在这个挑战中,我们将编写一个函数,该函数在对两个列表的每个元素都应用了提供的函数之后,返回这两个列表的对称差。
编写一个函数 symmetric_difference_by(a, b, fn),它接受两个列表 a 和 b 以及一个函数 fn。该函数应返回一个新列表,其中包含在对两个原始列表的每个元素都应用了提供的函数之后,在两个原始列表中的任意一个中出现,但不在两个列表中都出现的所有元素。
要解决这个问题,你可以按照以下步骤进行:
fn 创建一个 set。fn,只保留不在另一个列表先前创建的集合中的值。该函数应具有以下参数:
a:一个元素列表b:一个元素列表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]
在这个挑战中,我们学习了如何编写一个函数,该函数在对两个列表的每个元素都应用了提供的函数之后,返回这两个列表的对称差。我们使用了集合和列表推导式来实现这一点。