问题描述
我有一个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])