Python中lambda转函数的转换

1 投票
1 回答
2223 浏览
提问于 2025-04-17 08:25

我正在尝试把一个lambda函数转换成普通函数,但我不太明白。

def closest(u): 
    return min(updated_unique_list, key=lambda v: len(set(u) ^ set(v)))

这个lambda和min是怎么工作的呢?
我试着从文档中理解,但我想通过这个例子来理解,并创建一个普通函数,而不是这个lambda函数。

1 个回答

5

min 是用来找一个可迭代对象中最小值的函数。你可以把 min(lst, key=func) 在 Python 中理解为 (忽略一些细节,比如尽量少调用 f 或者只遍历一次列表)

retval = lst[0]
for item in lst:
  if func(item) < func(retval):
     retval = item
return retval

在你的例子中,它会在 updated_unique_list 中找到一个项目 v,使得 len(set(u) ^ set(v)) 的值最小。

这里的 ^ 是两个集合的 对称差集set(u) ^ set(v) 会返回一个只包含那些不在 uv 中同时出现的元素的集合。如果 uv 是一样的,结果的大小就是零;如果它们完全没有重叠,结果的大小就是最大的。

因此,这个函数的目的是在 updated_unique_list 中找到一个与 u 共享最多元素的对象。

如果你想要“正常的函数”,只需按照我上面描述的算法展开 min 即可。

撰写回答