Путь действительно странный. А главное, есть какие-то непонятные действия с массивом, которые, возможно, приводят к копированию, например result_arr = result_arr + know_range(number)
Проще всего было бы из строки получить массив с возрастающими ненулевыми интервалами, а потом пройтись по нему справа налево и "посрезать уголки":
строка "5 3 0 4 6 1 5 0 9 2 3 0"
массив после первого обхода: [inf, inf, 0, 1, 2, 3, 4, 0, 1, 2, 3, 0]
после обратного обхода, тот же массив: [2, 1, 0, 1, 2, 2, 1, 0, 1, 2, 1, 0]