获取列表的范围

时间:2015-03-02 02:51:15

标签: python

我正在编写一个函数def span(l),其中l是一个列表,它返回从最小到最大的范围。

以下是代码:

def span(l):
    l = l.sort()
    smallest = min(l)
    largest = max(l)
    return largest-smallest

我的问题是它无法识别l是一个列表。那是当我尝试返回l并输入以下内容作为输入时:

>>>span([4,2,9,6,9])

我一直收到错误。

3 个答案:

答案 0 :(得分:5)

list.sort对列表进行排序并返回None。重新分配l = l.sort()后,l变为无。当你TypeError

时,这并没有给你min(l)感到震惊

更重要的是,您不需要对l进行排序。无论排序如何,maxmin都会正常工作,所以

lst = [1,2,3,4,5]
unsorted_lst = [4,2,3,1,5]

max(lst), min(lst) == max(unsorted_lst), min(unsorted_lst)

只做

def span(lst):
    return max(lst) - min(lst)

答案 1 :(得分:2)

我想我知道你的意思,这是你得到的错误:

---------------------------------------------------------------------------
TypeError    Traceback (most recent call last)
<ipython-input-133-9b92b18b9c80> in <module>()
      7     return largest-smallest
      8 
----> 9 print span(l)

<ipython-input-133-9b92b18b9c80> in span(l)
      3 def span(l):
      4     l = l.sort()
----> 5     smallest = min(l)
      6     largest = max(l)
      7     return largest-smallest

TypeError: 'NoneType' object is not iterable

问题出在这条线上     l = l.sort()

如果您阅读documentation of sort(),则可以看到:

  

sort()和reverse()方法在排序或反转大型列表时修改列表以便经济空间。为了提醒您它们是由副作用操作的,它们不会返回已排序或反转的列表。

所以l.sort()不会返回任何内容。当你做l = l.sort()时,你什么也得不到。要更正您的代码:

def span(l):
    l.sort()    # <- here is the fix
    smallest = min(l)
    largest = max(l)
    return largest-smallest

答案 2 :(得分:1)

您不会显示span的代码,但会显示类似

的代码
def span(l):
    return max(l) - min(l)

如果按span表示“最大和最小项目之间的差异”,或者等同于简单的变体,例如return min(l), max(l),如果您的意思是“具有最小和最大项目的两项元组”,&amp; ; c,很难猜出你怎么可能出错。所以请执行显示代码! - )