识别列表中接近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]
请定义“关闭”@美元。根据代码,我认为他的意思是“最近的”,它必须被定义,以便我们理解问题,最重要的是在代码中。好的,问题被更新了。