首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有谁能解释一下([1,2,3,5,6],key=lambda x: abs(x-8))背后的逻辑?

有谁能解释一下([1,2,3,5,6],key=lambda x: abs(x-8))背后的逻辑?
EN

Stack Overflow用户
提问于 2018-10-23 09:03:56
回答 4查看 791关注 0票数 0

这是我的清单:a = [1, 3, 4, 7, 8, 9, 12, 13, 14]

我想得到最接近5的号码,这是解决方案:

代码语言:javascript
复制
b = min(a, key = lambda x: abs(x-5))

请解释上线中发生了什么。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-10-23 09:23:26

  1. abs(x-5) abs是与|x-5|等价的绝对数学函数。示例:当abs(x-5) x=61时,当x=4也是1时。
  2. lambda x: abs(x-5) 它可以写成 def func(x):返回abs(x-5) 这意味着a = [1,3,4,7,8,9,12,13,14] lambda x: abs(x-5) 会给 4,2,1,2,3,4,7,8,9
  3. key = lambda x: abs(x-5) 在这里,这个lambda函数返回的值存储在key变量中。 因此 键= 4,2,1,2,3,4,7,8,9
  4. 最后min(a, key) min函数使用key作为可迭代的方法来计算最小值。使用从键获得的最小值的位置,它显示来自可迭代a的值。 因此 键= 4(0),2(1),1(2),2(3),3(4),4(5),7(6),8(7),9(8) 最小值在位置2为1,在可迭代的a中在2位置显示值。 1(0)、3(1)、4(2)、7(3)、8(4)、9(5)、12(6)、13(7)、14(8) 也就是4。
票数 0
EN

Stack Overflow用户

发布于 2018-10-23 09:12:19

代码使用min内置函数,但使用了一个key参数。因此,它不返回列表的实际最小元素,而是返回该键函数最小的元素,即它的行为更像“阿敏”,而不是实际的"min“。

key函数(定义为lambda表达式)中,abs只是参数x (列表中的一个数字)与5之间的绝对区别。

这一行在某种程度上相当于这个循环,但比这个循环更短、更易读:

代码语言:javascript
复制
a = [1,3,4,7,8,9,12,13,14]
b = min_k = None
for x in a:
    k = abs(x-5)
    if min_k is None or k < min_k:
        b, min_k = x, k
票数 2
EN

Stack Overflow用户

发布于 2018-10-23 09:12:30

解释

min(iterable, key)返回iterable中相对于key的最小项。因此,它遍历iterable,每次计算元素xkey(x),然后返回key(x)最小的元素。

key=lambda x=abs(x-5)开始,我们计算了5之间的绝对差异,所以如果是x=3,那么abs(x-5)就是2,所以这将得到最接近5的数字。

使之成为O(log )算法

如果列表是有序的,您可以在对数时间内找到以下内容:

代码语言:javascript
复制
from bisect import bisect_left

def closest(ordered_list, x):
    idx = bisect_left(ordered_list, x)
    return min(ordered_list[max(idx-1,0):idx+1], key=lambda y: abs(y-x))

例如:

代码语言:javascript
复制
>>> closest(a, -1)
1
>>> closest(a, 0)
1
>>> closest(a, 1)
1
>>> closest(a, 2)
1
>>> closest(a, 3)
3
>>> closest(a, 4)
4
>>> closest(a, 5)
4
>>> closest(a, 6)
7
>>> closest(a, 11)
12
>>> closest(a, 15)
14
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52945163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档