任何人都可以请向我解释为什么这不起作用?我得到的错误消息是:TypeError:列表索引必须是整数或切片,而不是浮点数。Python找到中位数函数错误
def median(lst):
s = sorted(lst)
l = len(lst)/2
if len(lst) % 2 == 0:
print((s[l] + s[l-1])/2.0)
else:
print(s[l])
median([3,3,5,6,7,8,1])
任何人都可以请向我解释为什么这不起作用?我得到的错误消息是:TypeError:列表索引必须是整数或切片,而不是浮点数。Python找到中位数函数错误
def median(lst):
s = sorted(lst)
l = len(lst)/2
if len(lst) % 2 == 0:
print((s[l] + s[l-1])/2.0)
else:
print(s[l])
median([3,3,5,6,7,8,1])
误差计算l
使用运营商/
返回实际师即浮点值除以而//
只返回商即整数
因此
您应该计算l
asfollo WS
l = len(lst) // 2
或使用
l = int(l)
如果有帮助,请考虑加大我的回答 – Ani
如果len(lst)
是奇数然后l
变为浮动。
有趣的是,你写的代码在Python 2中可能是有效的,因为它使用整数除法,如果分子和分母都是整数。
但是在Python 3中,默认情况下使用了真分区。
欲了解更多信息,请参见:您In Python 2, what is the difference between '/' and '//' when used for division?和https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
好...列表索引必须是整数或切片转换
l
到int
,而不是浮动。所以强制l是一个整数 – FLab你将'len(lst)'除以2,这会产生一个浮点数。你可以使用整数除法('//')。 – L3viathan