python - 以指定的格式填充缺失值
问题描述
我们不能使用 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, _, _, _" 并返回填充的序列
解决方案
试图覆盖尽可能多的边缘情况:
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)
推荐阅读
- javascript - 如何使用javascript根据背景颜色更改圆形填充?
- api - 在 Next js 中从表单数据中读取数据时遇到问题
- javascript - HTML canvas shows tiny slice of adjacent image in tileset
- c# - Unity3D activeSelf function always returns true
- rust - 使用 hyper/azure sdk 返回流的终生问题
- docker - abernix/meteord docker build 在尝试构建流星应用程序时失败
- node.js - nodemon watch vs pm2 watch
- c++ - 接收数组作为指针参数的问题
- php - PHP - 转换数组多维键
- c - 如何在 Clang 中使用 WebAssembly 引用类型