Можно улучшить наверняка, но это делает трюк:
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)
Это создает массив с плавающей точкой: [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. Таким образом, мы делим 60 между положением 10 и 50 (чтоэто 5 ячеек)
Мы получили: 10,10,12,12,12,12,12,_,_
Мы достигли конца массива.
0 + 12 = 12 -> Мы делим его между текущим положениеми последние 12 поз (что составляет 3 ячейки)
Мы получили 10,10,12,12,12,12,4,4,4