我目前正在学习如何编写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!
有什么想法吗?
答案 0 :(得分:8)
lst.sort()
就地对列表进行排序并返回None
。因此lst = lst.sort()
将lst
设置为None
。
我认为最好的解决方法是
lst = sorted(lst)
这不会就地更改列表,因此引用此函数之外的相同列表的变量不会更改。
答案 1 :(得分:0)
你的头衔错了。 list.sort()返回None,因为它是由副作用操作的;第一行丢弃了该列表。
答案 2 :(得分:0)
答案 3 :(得分:0)
认为你的问题是lst.sort()返回None。
“TypeError:'NoneType'类型的对象没有len()”
看看如何在这里解决它。 Why does '.sort()' cause the list to be 'None' in Python?