Где в списке Python элемент не вписался в длину?
У меня алгоритм, который должен, подчиняясь некоторому условию if с разностью, скинуть в пустой список string_one_1 определенную строку (элемент) иного списка string_all.
Длина string_all составляет 10, длина x_i_list (переменная num) равна 11.
Сейчас получаю ошибку IndexError: list index out of range.
Код:
x_i_list = [(0.1*np.pi*i) for i in range(0, 11)]
order = 3
point_elem_i = 2 # можно взять любое значение: ошибка останется
num=len(x_i_list)
# cтроим конечные разности
if order < len(y_i_list):
result_1 = [ np.diff(y_i_list, n=d) for d in np.arange(1, len(y_i_list)) ]
else:
print(f'Определите порядок полинома меньше {len(y_i_list)}')
# сгенерируем строки с дельтами
string_all = [list(filter(lambda x: x is not None, el)) for el in zip_longest(*result_1)]
string_one_1= []
for elen in string_all:
# если остаток в окне меньше заданного порядка order:
if num-point_elem_i <= order:
# используем вторую строку разностей
string_one_1.append(elen[1])
else:
string_one_1.append(elen[point_elem_i])
Здесь если я убираю условие else, то ошибки нет. Интересно, что если я оставляю строку string_one_1.append(elen[point_elem_i]), придав переменной point_elem_i значение 1, убрав условие if с elen[1], то и тогда - ошибка.
Ответы (1 шт):
Благодаря комментариям, удалось найти ошибку. Исправил код так, чтобы он пробегал не по элементам вложенных списков, а а по самим этим спискам. В итоге скрипт получилось "отремонтировать".
Код:
# приведу только сам исправленный цикл
string_one_1= []
for elen in range(len(string_all)):
# если остаток в окне меньше заданного порядка order:
if num - point_elem_i <= order:
# используем вторую строку разностей
string_one_1.append(string_all[1])
break
else:
string_one_1.append(string_all[point_elem_i])
break