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

why is len([1]) giving me a "NoneType" error

我目前正在学习如何编写 python 2.7,但我 运行 在以下代码中遇到了一个令人困惑的错误,该代码试图(我认为效率很低) return 中位数输入的。

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])

以上是我的代码,它一直给我以下错误:

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()

我在 lst = [1] 处调用 len(lst) 似乎有问题,因为 python 似乎认为它是一个 None 变量?我很困惑。

在 python 的控制台终端上,我可以键入 len([1]) 并且我得到的结果是 1,没有任何问题。另外请记住,我完全知道这不是做我想做的事情的最佳方法,但我才刚刚开始学习 python!

有什么想法吗?

lst.sort() 就地对列表进行排序,returns None。所以 lst = lst.sort()lst 设置为 None.

我认为最好的解决方法是

lst = sorted(lst)

这不会就地更改列表,因此在该函数之外引用同一列表的变量不会更改。

你的标题写错了。 list.sort() returns None 因为它有副作用;第一行丢弃了列表。

您可以使用 sorted() 内置函数,而不是使用 lst.sort() which returns None

lst = sorted(lst)

现在,lst 包含您的排序列表。

认为您的问题是 lst.sort() returns None。

"TypeError: object of type 'NoneType' has no len()"

在此处查看解决方法。 Why does '.sort()' cause the list to be 'None' in Python?