NoneType对象没有长度

1 投票
2 回答
6380 浏览
提问于 2025-04-17 20:11
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()。这意味着你试图计算一个空对象的长度。虽然 medianevenmedianodd 这两个函数可以正常工作,但 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]

撰写回答