查找最接近cerain值的数字

nut*_*hip 1 python python-2.7

我有一个元组列表:

lst = [('54', '1.74', '253.2'), ('342', '2.85', '13.46'), ('53','2.43', '15.63')]
Run Code Online (Sandbox Code Playgroud)

我想在[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
Run Code Online (Sandbox Code Playgroud)

但是当我试图将字符串转换为float时会引发异常; /我怎么能真正做到这一点?

mgi*_*son 7

这应该是诀窍......

min(lst,key=lambda x: abs(float(x[0]) - 2))
Run Code Online (Sandbox Code Playgroud)

min函数将根据函数比较列表中的每个元素key.

演示:

>>> lst = [('1.74', '253.2'), ('2.85', '13.46'), ('2.43', '15.63')]
>>> min(lst,key=lambda x: abs(float(x[0]) - 2))
('1.74', '253.2')
Run Code Online (Sandbox Code Playgroud)