为什么len([1])给我一个"NoneType"错误

tde*_*a05 0 python python-2.7 nonetype

我目前正在学习如何编写python 2.7代码但是我在下面的代码中遇到了一个令人困惑的错误,它尝试(假设效率非常低)返回输入的中位数.

def median(lst):

    lst = lst.sort()
    median = 0

    if len(lst) == 1:
        median = lst[0]            
    elif len(lst) % 2 == 0:
        median_sum = lst[len(lst) / 2 - 1] + lst[len(lst) / 2 + 1]
        median = median_sum / 2.0
    else:
        median = lst[len(lst)/ 2 - 1]

    return median

print median([1])
Run Code Online (Sandbox Code Playgroud)

上面是我的代码,它不断给我以下错误:

Traceback (most recent call last):
  File "C:/Python27/SAVED DOCS/test3.py", line 16, in <module>
    print median([1])
  File "C:/Python27/SAVED DOCS/test3.py", line 6, in median
    if len(lst) == 1:
TypeError: object of type 'NoneType' has no len()
Run Code Online (Sandbox Code Playgroud)

似乎我在调用len(lst)时遇到问题lst = [1]因为python似乎认为它是一个None变量?我很困惑.

在python的控制台终端上,我可以输入len([1]),我得到1的结果没有任何问题.另外请记住,我完全清楚这不是做我想做的最好的方法,但我只是开始学习python!

有任何想法吗?

Rem*_*ich 8

lst.sort()对列表进行就地排序并返回None.所以lst = lst.sort()设置lstNone.

我认为最好的办法是做

lst = sorted(lst)
Run Code Online (Sandbox Code Playgroud)

这不会就地更改列表,因此引用此函数之外的相同列表的变量不会更改.