为什么 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?
我目前正在学习如何编写 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?