我正在遍历Codeacademy并在Python 3中进行练习。我在“中位数”练习中无法获得良好的输出。
我遇到错误
TypeError:列表索引必须是整数或切片,而不是浮点数。
我尝试将索引转换为浮点数。我无法使用底数分割(//
),因为我需要返回非整数作为结果。
def median(lst):
sorted_list = sorted(lst)
if len(sorted_list) % 2 != 0:
index = len(sorted_list)//2
return sorted_list[index]
elif len(sorted_list) % 2 == 0:
index_1 = (len(sorted_list)/2)
index_2 = (len(sorted_list)/2) - 1
mean = (sorted_list[index_1] + sorted_list[index_2])/2
return mean
print(median([1, 6, 5, 47, 3, 100, 59, 36, 4, 38]))
对上师的任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
列表中项目的索引是它在列表中的位置。
example_list = [1, 1, 4, 5, 5, 9]
在这里,如果要获得中间值,则应平均两个中间值:4和5。如果要通过找到len(example_list) / 2
并将其作为索引来执行此操作,则索引不是整数,因此它不会指向列表中的位置。
某物的3.0
位置是什么?这没有道理。仅在获取切片时才需要使用整数。就您而言:
elif len(sorted_list) % 2 == 0:
index_1 = (len(sorted_list) // 2)
index_2 = (len(sorted_list) // 2) - 1
mean = (sorted_list[index_1] + sorted_list[index_2]) / 2
return mean
编辑:
每当您使用/
时,答案都是浮点数。即使结果在数学上是整数,也将以x.0
而不是x
的形式返回。