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

时间:2017-01-06 16:45:31

标签: 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])

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

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()
似乎我在调用len(lst)时遇到问题,其中lst = [1]因为python似乎认为它是一个None变量?我很困惑。

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

有什么想法吗?

4 个答案:

答案 0 :(得分:8)

lst.sort()就地对列表进行排序并返回None。因此lst = lst.sort()lst设置为None

我认为最好的解决方法是

lst = sorted(lst)

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

答案 1 :(得分:0)

你的头衔错了。 list.sort()返回None,因为它是由副作用操作的;第一行丢弃了该列表。

答案 2 :(得分:0)

您可以使用sorted()内置函数,而不是使用返回lst.sort()的{​​{1}}:

None

现在,lst = sorted(lst) 包含您的排序列表。

答案 3 :(得分:0)

认为你的问题是lst.sort()返回None。

“TypeError:'NoneType'类型的对象没有len()”

看看如何在这里解决它。 Why does '.sort()' cause the list to be 'None' in Python?