简介
在 Python 中,两个列表的对称差是一个新列表,它包含原始列表中任意一个列表里的所有元素,但不包含两个列表都有的元素。在这个挑战中,我们将编写一个函数,该函数在对两个列表的每个元素都应用了提供的函数之后,返回这两个列表的对称差。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
在 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]
在这个挑战中,我们学习了如何编写一个函数,该函数在对两个列表的每个元素都应用了提供的函数之后,返回这两个列表的对称差。我们使用了集合和列表推导式来实现这一点。