首页 > 解决方案 > min() arg 是一个空序列,如果没有数字进入我的 def 怎么办

问题描述

嗨,我的代码有问题,我不知道如何解决。挑战是:“需要多少个连续数字?” ...填充数组。示例:[1, 2, 4, 6] 答案应该是 2。这就是我得到的。

def consecutive(arr):
    arr.sort()
    minimum = min(arr)
    maximum = max(arr)

    diff = maximum - minimum - len(arr) + 1

    return diff

问题是当 arr 为 [] 时它不起作用。我可以对我的代码进行哪些更改。

标签: pythonsequence

解决方案


您只能计算非空列表的最小值和最大值,因此您有两种选择:如果输入为空,则引发异常,或者在空列表的情况下提供默认值以返回。(这两种情况都由调用者决定如果列表为空则需要什么,而不是强制函数猜测适当的值。)

  1. 引发异常。

    def consecutive(arr):
        if not arr:
            raise ValueError("List is empty")
    
        minimum = min(arr)
        maximum = max(arr)
    
        diff = maximum - minimum - len(arr) + 1
    
        return diff
    
  2. 提供默认值

    def consecutive(arr, if_empty=None):
        if not arr:
            return if_empty
    
        minimum = min(arr)
        maximum = max(arr)
    
        diff = maximum - minimum - len(arr) + 1
    
        return diff
    

请注意,在这两种情况下,您都不必先对列表进行排序;两者都可以很好地处理未排序的列表minmax


推荐阅读