【问题标题】:Finding number closest to cerain value查找最接近某个值的数字
【发布时间】:2013-03-01 23:31:48
【问题描述】:

我有一个元组列表:

lst = [('54', '1.74', '253.2'), ('342', '2.85', '13.46'), ('53','2.43', '15.63')]

我想找到最接近 2.0 的 [1] 位置的元组

我是这样去的:

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

但是当我尝试将字符串转换为浮动时,它会引发异常;/ 我该怎么做呢?

【问题讨论】:

标签: python python-2.7


【解决方案1】:

这应该可以解决问题...

min(lst,key=lambda x: abs(float(x[0]) - 2))

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')

【讨论】:

  • 非常感谢您的回复。然而,有些东西对我不起作用;/。我正在抓取一个网站,我的代码如下所示:lst = re.findall(pattern, html) 生成一个 3 项元组列表 [('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 我收到 Invalid syntax 错误。你知道这里有什么吗?
  • 你放错了括号。您需要:abs(float(x[1])-2) 而不是 abs(float(x[1] - 2))
  • 非常感谢@Maus。你甚至不知道这让我有多紧张哈哈 :)
  • +1 对于这个非常干净(且运行快速)的答案。 FWIW,同样的方法可以与 heapq.nsmallest() 一起使用来找到 n 最接近的值,并与 sorted() 一起使用来排序所有输入与目标值的接近程度。
  • @RaymondHettinger -- 感谢您的 +1。来自你这意味着很多:-)。 heapqsorted 注释很好。核心语言和标准库在很多地方的一致性真是太好了。
猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
相关资源
最近更新 更多