Почему индекс на Python выходит за пределы списка?

Получаю список списков конечных разниц string_all_dif_10, в котором 10 элементов-строк таблицы. В каждой строке от 1 до 10 элементов-чисел. Есть переменная order, равная 5. Когда в пункте кода 6.4.1.2 прохожу циклом в диапазоне (order+1), то получаю ошибку выхода индекса за диапазон.

Ошибка:

IndexError                                Traceback (most recent call last)
<ipython-input-38-8e00958d1d18> in <module>
    214     return diff_table
    215 
--> 216 diffs()
    217 

<ipython-input-38-8e00958d1d18> in diffs()
     94         print(f"Список string_one_2: {string_one_2}")
     95         for nums in range(order + 1):
---> 96             koef = string_one_2[nums] / (np.math.factorial(nums))
     97 
     98 

IndexError: list index out of range

В коде определяется коэффициент k, который из разных строк выбирает требуемую (это коэффициент как раз и задает), формируя переменную string_one_2.

Но:

  1. при проверке print(f"Список string_one_2: {string_one_2}") вижу, что строка не одна, а несколько;
  2. переменная цикла nums, как и сказал, выводит перебор за границы списка (по идее мы должны получить перебор по одной строке, а не в пределах строк в рамках списка списков).

В чем может быть ошибка?

import numpy as np
import pandas as pd
from itertools import zip_longest

def func(x):
    return np.sin(x)

def diffs():
    # 1. получим значения полинома
    # 1.1. запросим порядок полинома
    order = 5
    # 1.2. определим коэффициент n, шаг h
    num = 10         
    h = 0.1 * np.pi
    # сетка абсцисс оси Ох и ординат на Oy
    x_i_list = [(h * i) for i in range(0, num + 1)]
    y_i_list = [(func(x)) for x in x_i_list]
    # новая сетка
    x_j_list = [(h / 2 * j) for j in range(0, num * 2 + 1)]

 
        # 3. Рассчитаем конечные разности для сетки
    # 3.1. Сначала по столбцам
    if order < len( y_i_list):
        result_10 = [np.diff( y_i_list, n=d) for d in np.arange(1, len( y_i_list ))]
    else:
        print(f'Определите порядок полинома меньше {len(y_i_list) - 1}')
     
    # 3.2. Следом представление разниц переформатируем в построчное размещение
    string_all_dif_10 = [list(filter(lambda x_source: x_source is not None, els_source)) for els_source in
                         zip_longest(*result_10)]

    # 4.  Длина сетки (x_j). 
    num_new_grid = 20


    # 6. пока индексы в сетке x_j_list_dif не достигли длины списка:
    for point, point_elem_j_dif in enumerate(x_j_list):
        # 6.1. имеем дело с ближайшим для j слева значением:
       
        k = min(num_new_grid - order, point // 2)

        string_one_2 = string_all_dif_10[k]  # строка с дельтами

        # 6.4.1.2. считаем коэффициент для второй производной

        print(f"Список string_one_2: {string_one_2}")
        for nums in range(order + 1):
            koef = string_one_2[nums] / (np.math.factorial(nums)) 

Ответы (0 шт):