如何对列表中的下一个数进行舍入?



让我来告诉你我的意思。假设我有一个包含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)

最新更新