Где в списке 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 шт):

Автор решения: Alex Kazantsev

Благодаря комментариям, удалось найти ошибку. Исправил код так, чтобы он пробегал не по элементам вложенных списков, а а по самим этим спискам. В итоге скрипт получилось "отремонтировать".

Код:

# приведу только сам исправленный цикл

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
→ Ссылка