可以肯定地增强,但这可以解决问题:
string = "_,_,30,_,_,_,50,_,_"
output = string.split(',')
pos = 0
next_value = 0
last_pos = 0
last_value = 0
while pos < len(output):
if output[pos] != '_' or (pos + 1 == len(output)):
if output[pos] != '_':
next_value = int(output[pos])
else:
next_value = 0
new_value = (next_value + last_value) / (pos - last_pos + 1)
for i in range(last_pos, pos + 1):
output[i] = new_value
last_value = new_value
last_pos = pos
pos += 1
print(output)
这会产生一个 float 数组:[10.0, 10.0, 12.0, 12.0, 12.0, 12.0, 4.0, 4.0, 4.0]
额外的信息 :
- 您必须通过迭代数组来找到一个非缺失值。
- 当您找到一个时,将其添加到找到的最后一个非缺失值(否则为 0),并设置里程碑之间所有单元格的平均值(包括它们自己)
- 当你到达数组的末尾时,不要忘记做同样的事情。当前值变成0,你把它加到上一个,再分享一次
如果我们采用以下字符串_,_,30,_,_,_,50,_,_
首先我们找到 30。我们在开始位置和当前位置之间共享它。
我们有 :10,10,10,_,_,_,50,_,_
然后我们找到 50。之前的数值是 10。所以我们在 10 和 50 的 pos 之间共享 60(也就是 5 个单元格)
我们有 :10,10,12,12,12,12,12,_,_
我们到达数组的末尾。
0 + 12 = 12 -> 我们在当前位置和最后 12 个位置(即 3 个单元格)之间共享它
我们有10,10,12,12,12,12,4,4,4