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

如何用Python原生方法将列表中-99标记的缺失值替换为相邻值均值或相邻值

代码问题说明

你的代码存在三处核心逻辑错误:

  • 第一层循环遍历的是外层列表的索引,你没有遍历每个子列表内部的元素,且判断条件写的是num == missing_value,num是索引值,永远不可能等于-99,这是最直接的错误原因
  • 没有处理连续缺失的场景,你写的逻辑只假设缺失值左右都是有效值,完全不符合第二条规则要求
  • 直接按索引取前后值没有做边界校验,一旦缺失值出现在列表首尾会直接抛出索引越界错误
正确实现代码
def cleanup(data):
    missing_value = -99
    # 遍历每个子列表
    for sub_list in data:
        n = len(sub_list)
        for i in range(n):
            if sub_list[i] != missing_value:
                continue
            # 查找左侧最近有效值
            left_val = None
            left_idx = -1
            for j in range(i-1, -1, -1):
                if sub_list[j] != missing_value:
                    left_val = sub_list[j]
                    left_idx = j
                    break
            # 查找右侧最近有效值
            right_val = None
            right_idx = n
            for j in range(i+1, n):
                if sub_list[j] != missing_value:
                    right_val = sub_list[j]
                    right_idx = j
                    break
            # 按规则赋值
            if left_val is not None and right_val is not None:
                # 单个缺失:左右相邻都是有效值,取平均
                if left_idx == i-1 and right_idx == i+1:
                    sub_list[i] = (left_val + right_val) // 2
                else:
                    # 连续缺失:取距离更近的有效值,距离相同取左侧
                    left_dist = i - left_idx
                    right_dist = right_idx - i
                    sub_list[i] = left_val if left_dist <= right_dist else right_val
            # 只有单侧有效值时直接取对应值
            elif left_val is not None:
                sub_list[i] = left_val
            elif right_val is not None:
                sub_list[i] = right_val
    return data

# 测试运行
data = [[1, 2, -99, 4, 5], [1, 2, -99, -99, 5],[1, 2, 3, -99, -99]]
print(cleanup(data))
运行输出
[[1, 2, 3, 4, 5], [1, 2, 2, 5, 5], [1, 2, 3, 3, 3]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:12:04