微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到等于或大于给定数字的最接近数字

如何解决找到等于或大于给定数字的最接近数字

我有一个python函数,需要在列表“值”中找到最接近给定数字“ n”但大于或等于“ n”的数字。

到目前为止,我有这个:

def nearest_largest_value2 (n,values):
      closest = []
      for i in values:
        if i == n:
          closest = i
        elif (i > n) and (i-n < 2):
          closest = i
       return closest

print(nearest_largest_value2(5,[1,3,4,6,7]))
print(nearest_largest_value2(5,[7,1]))
print(nearest_largest_value2(5,5,7]))

问题是我得到了前两个打印语句所需的答案(6) 但是当我想要得到5时,最后一条打印语句的值为'6'。

我是Python的新手,但我认为一旦满足第一个if子句,代码就会停止。

解决方法

条件i-n < 2错误。相反,您应该检查当前i是否比当前closest更近。例如:

def nearest_largest_value2 (n,values):
  closest = None
  for i in values:
    if (i >= n) and (closest is None or i < closest):
      closest = i
  return closest

编辑:
描述问题的另一种方法是找到大于或等于n的最小值。描述这样的问题可以使用更“ pythonic”的oneliner:

def nearest_largest_value2 (n,values):
    return min(v for v in values if v >= n)

EDIT2:
如@ekhumoro所指出的,如果values不包含等于或大于n的元素,则上一个编辑中提供的替代解决方案将失效。他还慷慨地提出了解决方案:

def nearest_largest_value2 (n,values):
    min([v for v in values if v >= n] or [None])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。