Python 查找最接近cerain值的数字

Python 查找最接近cerain值的数字,python,python-2.7,Python,Python 2.7,我有一个元组列表: lst = [('54', '1.74', '253.2'), ('342', '2.85', '13.46'), ('53','2.43', '15.63')] 我想找到位置[1]最接近2.0的项所在的元组 我是这样说的: number = lst[0][1] for i in lst: if abs(float(i[1]) - 2) < float(number): number = i[1] if number in i:

我有一个元组列表:

lst = [('54', '1.74', '253.2'), ('342', '2.85', '13.46'), ('53','2.43', '15.63')]
我想找到位置
[1]
最接近2.0的项所在的元组

我是这样说的:

number = lst[0][1]
for i in lst:
    if abs(float(i[1]) - 2) < float(number):
        number = i[1]
        if number in i:
            print i
number=lst[0][1]
对于lst中的i:
如果abs(浮动(i[1])-2)<浮动(编号):
数字=i[1]
如果i中的数字为:
打印i

但是,当我试图将字符串转换为float时,它会引发一个异常;/我该怎么做呢

这应该可以做到

min(lst,key=lambda x: abs(float(x[0]) - 2))
min
功能将根据
键比较列表中的每个元素

演示:


这应该可以解决问题

min(lst,key=lambda x: abs(float(x[0]) - 2))
min
功能将根据
键比较列表中的每个元素

演示:


非常感谢您的回复。然而,有些东西对我不起作用;/。我正在抓取一个网站,我的代码如下:
lst=re.findall(pattern,html)
它生成一个三项元组的列表
[('54','1.74','253.2'),('342','2.85','13.46'),('53','2.43','15.63')]
继续
lst=min(lst,key=lambda x:abs float(x[1]-2))
print lst
我得到了一个
无效语法
错误。你知道这是怎么回事吗?你把一个参数放错地方了。你需要:
abs(float(x[1])-2)
而不是
abs(float(x[1]-2))
。非常感谢@Maus。你甚至不知道这让我有多紧张lol:+1非常干净(而且运行得很快)回答。FWIW,同样的方法也可用于heapq.nsmallest()以查找n个最接近的值,并使用sorted()按与目标值的接近程度对所有输入进行排序。@RaymondHettinger--感谢+1。来自你,这意味着很多:-)。而
heapq
sorted
注释是很好的要点。核心语言和标准库在很多地方是多么的一致,非常感谢您的回复。然而,有些东西对我不起作用;/。我正在抓取一个网站,我的代码如下:
lst=re.findall(pattern,html)
它生成一个三项元组的列表
[('54','1.74','253.2'),('342','2.85','13.46'),('53','2.43','15.63')]
继续
lst=min(lst,key=lambda x:abs float(x[1]-2))
print lst
我得到了一个
无效语法
错误。你知道这是怎么回事吗?你把一个参数放错地方了。你需要:
abs(float(x[1])-2)
而不是
abs(float(x[1]-2))
。非常感谢@Maus。你甚至不知道这让我有多紧张lol:+1非常干净(而且运行得很快)回答。FWIW,同样的方法也可用于heapq.nsmallest()以查找n个最接近的值,并使用sorted()按与目标值的接近程度对所有输入进行排序。@RaymondHettinger--感谢+1。来自你,这意味着很多:-)。而
heapq
sorted
注释是很好的要点。核心语言和标准库在许多地方是多么的一致。