我正在编写一个函数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])
我一直收到错误。
答案 0 :(得分:5)
list.sort
对列表进行排序并返回None
。重新分配l = l.sort()
后,l
变为无。当你TypeError
min(l)
感到震惊
更重要的是,您不需要对l
进行排序。无论排序如何,max
和min
都会正常工作,所以
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,很难猜出你怎么可能出错。所以请执行显示代码! - )