Python中lambda转函数的转换
我正在尝试把一个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)
会返回一个只包含那些不在 u
和 v
中同时出现的元素的集合。如果 u
和 v
是一样的,结果的大小就是零;如果它们完全没有重叠,结果的大小就是最大的。
因此,这个函数的目的是在 updated_unique_list
中找到一个与 u
共享最多元素的对象。
如果你想要“正常的函数”,只需按照我上面描述的算法展开 min
即可。