【问题标题】:How can I round the next number in a list? [duplicate]如何舍入列表中的下一个数字? [复制]
【发布时间】:2021-05-30 13:40:55
【问题描述】:

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

【问题讨论】:

标签: python list


【解决方案1】:

如果你的列表总是排序的,你可以使用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 内置函数:

>>> next((e for e in lst if e>k), default_if_not_found)
250

同样的注释:如果找不到e>k,则需要定义一个默认值。

【讨论】:

  • 对任何有意义大小的列表可能总是最好的! ..但请注意,这应该尝试/排除或包含最大值,因为它将raise IndexError 用于它之外的值
  • @raid6n 选择此作为最佳答案后,请确保根据您自己的需要,您确定 K 始终介于 list[0]list[-1] 之间,并且输入列表永远不会空的。如果可能,此代码需要检查这些条件,因为如果 K 表现不佳,当前版本将引发异常。
【解决方案2】:

我是老派。我更喜欢多几行的东西,任何看到代码的人都可以理解:

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))

【讨论】:

    【解决方案3】:

    只要保证对列表进行排序,这应该可以工作,如果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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多