让我来告诉你我的意思。假设我有一个包含75,250,525和900的列表。随机选一个数字,95。我怎么把95四舍五入到250?
到目前为止,我只做了,所以它四舍五入到最接近的数字,而不是下一个整数。
def closest(lst, K):
return lst[min(range(len(lst)), key = lambda i: abs(lst[i]-K))]
lst = [75, 250, 525, 900]
K = 95
print(closest(lst, K))
如果你的列表总是排序的,你可以使用bisect:
import bisect
lst = [75, 250, 525, 900]
k=95
>>> lst[bisect.bisect_right(lst, k)]
250
您需要决定当k
大于lst
中的所有数字时要返回什么,如果k>=900
将是索引错误。很容易固定与try ... except
,但你需要指定什么"正确"的答案是在这种情况下。
Bisect将是大列表的最佳选择,因为它是用C编写的,而且速度非常快。
或者,您可以使用下一个内置函数:
>>> next((e for e in lst if e>k), default_if_not_found)
250
同样的注释:如果找不到e>k
,你需要定义一个默认值
我是老派的。我更喜欢有几行代码的东西,这样任何人看到代码都能理解:
def closest(lst, n):
for i in lst:
if i > K:
return i
return None
K = 95
lst = [75, 250, 525, 900]
print(closest(lst, K))
只要保证列表被排序,这应该是有效的,如果k
大于l
中的所有元素,则返回None
。
def closest(l, k):
for i in l:
if k < i:
return i
return None
res = closest([75, 250, 525, 900] , 95)