Python 3中的CodeAcademy中位练习

时间:2019-02-13 14:27:02

标签: python python-3.x

我正在遍历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]))

对上师的任何帮助将不胜感激。谢谢!

1 个答案:

答案 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的形式返回。