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

问题描述

我有一个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])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...