不同长度子list构成的嵌套列表各位置元素median求解方法
问题修复方案
原代码报错的核心原因是列表推导式取值时没有校验子列表长度是否覆盖当前索引,直接访问item[i]会在子列表长度不足时触发索引越界。
实现逻辑
- 按需求遍历0~8共9个索引位置(对应输出要求的第1到第9个位置)
- 每个索引位置下,仅收集长度大于当前索引的子列表对应位置的元素,自动跳过长度不足的子列表
- 对每个位置收集到的元素集合计算中位数,按顺序拼接为最终结果列表
可运行代码
import statistics # 输入嵌套列表 c = [ [1, 1, 1, 18, 35, 35, 70, 133, 280], [1, 1, 1, 53, 90, 101, 130, 148, 178], [1, 1, 1, 18, 35, 133, 133, 164], [1, 1, 1, 18, 101, 108], [1, 1, 18, 36, 86, 118, 126] ] result = [] for i in range(9): # 过滤长度不足的子列表,收集当前位置有效值 valid_values = [item[i] for item in c if len(item) > i] result.append(statistics.median(valid_values)) print(result)
示例运行结果
针对你给出的测试数据,运行后输出结果为:
[1, 1, 1, 18, 86, 108, 128.0, 148, 229.0]
如果不想依赖内置的statistics模块,可以自行实现中位数计算逻辑,替换对应调用即可:
def get_median(nums): sorted_nums = sorted(nums) length = len(sorted_nums) mid_idx = length // 2 if length % 2 == 1: return sorted_nums[mid_idx] return (sorted_nums[mid_idx - 1] + sorted_nums[mid_idx]) / 2
内容的提问来源于stack exchange,提问作者ianux22
相关产品推荐
相关产品推荐

