识别列表中接近Python中给定数字的非零元素

识别列表中接近Python中给定数字的非零元素,python,Python,我有这样的清单: lst = [1, 5, 0, 0, 4, 0] 编辑: 我想找到列表中第一个不等于零的数字的位置,它是最接近给定数字的 a = 3 # (given number) 它也应该返回4作为索引和值。 我试过这个: min(enumerate(lst), key=lambda x: abs(x[1]-a)) 但是它也显示了0元素 哪种方法更好?如果我理解正确,只需在枚举后过滤掉零: In [1]: lst = [1, 5, 0, 0, 4, 0] In [2]: a =

我有这样的清单:

lst = [1, 5, 0, 0, 4, 0]
编辑: 我想找到列表中第一个不等于零的数字的位置,它是最接近给定数字的

a = 3  # (given number)
它也应该返回4作为索引和值。 我试过这个:

min(enumerate(lst), key=lambda x: abs(x[1]-a))
但是它也显示了0元素


哪种方法更好?

如果我理解正确,只需在枚举后过滤掉零:

In [1]: lst = [1, 5, 0, 0, 4, 0]

In [2]: a = 3

In [3]: min(filter(lambda x: x[1] != 0, enumerate(lst)),
            key=lambda x: abs(x[1] - a))
Out[3]: (4, 4)

不过,对于给定的值,您自己的示例也会返回
(4,4)
a=0时,就有区别了。

你的答案非常接近。你只需要将零替换为无穷大

min(enumerate(lst), key=lambda x: abs(a - (x[1] if x[1] else float("inf"))))

编辑:翻转
a
x[1]

请定义“关闭”@美元。根据代码,我认为他的意思是“最近的”,它必须被定义,以便我们理解问题,最重要的是在代码中。好的,问题被更新了。