如何解决找到等于或大于给定数字的最接近数字
我有一个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 举报,一经查实,本站将立刻删除。