首页 > 解决方案 > 以指定的格式填充缺失值

问题描述

我们不能使用 numpy 或 pandas ,谁能帮我找到它的方法 你将得到一个带有数字和 '_'(缺失值)符号的字符串,你必须按照说明替换 '_' 符号 Ex 1:_ , _, _, 24 ==> 24/4, 24/4, 24/4, 24/4 即我们。已将 24 个平均分配到所有 4 个地方

例 2:40, _, _, _, 60 ==> (60+40)/5,(60+40)/5,(60+40)/5,(60+40)/5,(60+ 40)/5 ==> 20, 20, 20, 20, 20 即 (60+40) 的总和均匀地分配到所有 5 个位置

例如 3: 80, _, _, _, _ ==> 80/5,80/5,80/5,80/5,80/5 ==> 16, 16, 16, 16, 16 即 80 是完全分配给所有 5 个正确的缺失值

例 4:_, _, 30, _, _, _, 50, _, _
==> 我们将从左到右填充缺失值 a。首先,我们将 30 分配给左侧两个缺失值 (10, 10, 10, _, _, _, 50, _, _) b. 现在在 (10, 10, 12, 12, 12, 12, 12, _, ) 之间分配总和 (10+50) 缺失值。现在我们将为具有逗号分隔值的给定字符串分配 12 到右侧缺失值 (10, 10, 12, 12, 12, 12, 4, 4, 4),这将具有两个缺失值数字,例如 ex: ", _, x, _, _, " 你需要填充缺失的值 Q: 你的程序读取一个字符串,比如 ex: " , _, x, _, _, _" 并返回填充的序列

标签: python

解决方案


试图覆盖尽可能多的边缘情况:

inp = "80, _, _, _, _"
inp=inp.split(", ")
start=-1
end=-1
new_arr=inp.copy()
for i in range(len(inp)):
    if (inp[i]=='_')&(i!=len(inp)-1):
        continue
    elif start==-1:
        if i==0:  ## 0th position element has non blank value
            # print("cond1")
            start=0
            end=0
            new_arr[i]=int(inp[i])
        else:
            # print("cond2")
            start=i
            end=i
            avg=int(inp[start])/(i+1)
            for k in range(0, start+1):
                new_arr[k]=avg
    elif i==len(inp)-1:  ## reached last element
        # print("cond3")
        avg=int(new_arr[start])/(i+1-start)
        for k in range(start, i+1):
            new_arr[k]=avg
    else:
        # print("cond4")
        end=i
        if end-start>1:  ## blank are present
            avg=(int(new_arr[start])+int(new_arr[end]))/(end-start+1)
            for k in range(start, end+1):
                new_arr[k]=avg
        start=end
    print(new_arr)

这个的复杂度是~O(n),空间复杂度~O(n)


推荐阅读