You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

奇偶长度列表中位数计算异常:偶数列表结果不符合预期排查

如何修正中位数计算函数的偶数长度列表问题?

嘿,我帮你找出问题所在啦!你的代码里有几个关键错误,导致偶数长度列表的中位数计算不对,咱们一步步拆解:

问题分析

  • 全局变量误用:你的函数参数是myEvenList,但函数内部却在操作全局的myOddList,甚至用myOddList的长度n来判断奇偶分支!这就意味着不管你传入什么列表,函数都只会根据全局的奇数长度列表来走分支,自然不会触发偶数列表的计算逻辑,返回3也就不奇怪了。
  • 不必要的全局变量修改:函数里同时对全局的myOddList和参数myEvenList执行sort(),这不仅完全没必要,还会意外修改全局变量的顺序。

修正后的代码

myOddList = [1, 2, 3, 4, 5]
myEvenList = [1, 2, 3, 4, 5, 6]

def medianCalculator(lst):
    # 复制列表后排序,避免修改原始输入列表(若无需保留原列表,可直接用lst.sort())
    sorted_list = lst.copy()
    sorted_list.sort()
    length = len(sorted_list)
    
    if length % 2 != 0:
        # 奇数长度:直接取中间索引的元素
        return sorted_list[length // 2]
    else:
        # 偶数长度:取中间两个元素的平均值
        mid_left = sorted_list[(length // 2) - 1]
        mid_right = sorted_list[length // 2]
        return (mid_left + mid_right) / 2

# 测试奇数列表
print(medianCalculator(myOddList))  # 输出 3
# 测试偶数列表
print(medianCalculator(myEvenList))  # 输出 3.5

关键修正点

  1. 通用参数设计:把函数参数改成通用的lst,不管传入奇数还是偶数长度的列表,都能统一处理。
  2. 基于传入列表判断奇偶:用传入列表的length来决定走哪个分支,这才是符合逻辑的判断依据。
  3. 安全排序:先复制列表再排序,避免意外修改原始输入的列表顺序(如果你的场景允许修改原列表,也可以省略复制步骤直接排序)。
  4. 简化偶数索引计算:对于长度为6的列表,length//2得到3,前一个索引是2,对应元素3,后一个索引3对应元素4,两者的平均值正好是3.5,逻辑更直观。

内容的提问来源于stack exchange,提问作者user13938341

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:02:46