列表索引超出python函数的范围

时间:2017-03-21 23:55:27

标签: python

编码和Python的新手,但我真的想学习。尝试编写一个函数从排序列表中提取中位数。我一直收到列表索引超出范围的错误。有人能指出我正确的方向,试图理解逻辑,以便我能以更加程序化的方式思考。

   def median(n):
       sorted(n)
       ln = len(n)
       even1 = n[ln / 2]
       even2 = n[ln /2 - 1]
       odd =  n[ln + 1 / 2]
       middle = 0
       if ln % 2 != 0:
            middle = odd
       else:
            middle = (even1 + even2) / 2.0

      return middle

2 个答案:

答案 0 :(得分:2)

odd = n[ln + 1 / 2]

ln + (1/2) ...转换为ln + 0 = ln。您正在尝试访问超出范围的元素n[ln]

该行应为

odd = n[(ln + 1) / 2]

答案 1 :(得分:0)

关键错误在于计算中点。你需要括号:

   odd =  n[(ln + 1) / 2]

你仍然有一些索引问题(请记住,Python列表从0开始,而不是1),但这是你"超出范围"的源头。问题。要修复奇数中点问题,您必须备份一个元素:

   odd =  n[(ln - 1) / 2]