NoneType对象没有长度
def medianeven (L):
while len(L) > 2:
L = L[1:(len(L)-1)]
return average (L)
def medianodd (L):
while len(L) > 1:
L = L[1:(len(L)-1)]
return L[0]
def median (L):
new = L.sort()
a = len(new)
if a % 2 == 0:
medianeven(new)
else:
medianodd(new)
它说 TypeError: object of type 'NoneType' has no len()
。这意味着你试图计算一个空对象的长度。虽然 medianeven
和 medianodd
这两个函数可以正常工作,但 median
这个函数却没有正常运行。
2 个回答
0
你在这一行调用的 sort() 方法:
new = L.sort();
其实是不会返回任何东西的。所以 'new' 这个变量会是 'None',也就是没有值,自然也就没有长度。我觉得直接用 L.sort() 就可以对列表进行排序,而且是直接在原来的列表上排序,不需要把结果存到 'new' 里。
7
.sort()
是一个原地排序的方法,它不会返回任何值,返回的是 None
。
把这一行改成:
new = L.sort()
就改成这样:
L.sort()
然后把你所有的 new
替换成 L
。你还需要把那些函数调用的结果 return
回来:
if a % 2 == 0:
return medianeven(new)
else:
return medianodd(new)
另外,Python 的切片支持负数索引,所以这段代码:
L[1:(len(L)-1)]
可以简化成:
L[1:-1]