Как в Python пройти цикл, чтобы последовательно сложить перемноженные элементы?
Мне требуется положить в список parameters_list результат перебора, полученный так: сначала там должна появиться разница (x-x_0), где x взят из списка x_j_list, а x_0- из списка x_col_list.
Затем в parameters_list должен появиться другой элемент: произведение первой разницы и второй. Ее получаем вычитанием из того же самого x следующего за нулевым элемента списка x_col_list. И так далее, пока не закончатся элементы в данном списке (их там столько, сколько составляет переменная order).
Составил скрипт, который работает, не как ожидается. Ответы, которые получаю, не очень-то сходятся после второго (первые два алгоритм считает верно).
Мой выход: Список parameters_list: [0.15707963267948966, -0.024674011002723394, -0.07402203300817019, -0.12337005501361697].
При этом вместо элемента -0.074 мой устный счет дает 0,011; вместо элемента -0.123 считаю другой: -0.008.
Код:
x_j_list = [(0.05*np.pi*j) for j in range(0, 21)]
point_elem_j = 1
order = 4
x_col_list = [0.0, 0.3141592653589793, 0.6283185307179586, 0.9424777960769379]
parameters_list = []
for args, elems in enumerate(x_col_list):
poly_0 = x_j_list[point_elem_j] - x_col_list[0]
print(x_col_list[0])
print('poly_0: ', poly_0)
print('elems: ', elems)
if not args:
parameters_list.append(poly_0)
if args in range(1, order): # args = 1,2
poly_n = (x_j_list[point_elem_j] - x_col_list[args])*poly_0
print('elems: ', elems)
print('poly_n: ', poly_n)
if args:
parameters_list.append(poly_n)
poly_0 = poly_n
print('Длина parameters_list: ', len(parameters_list))
print('Список parameters_list: ', parameters_list)
Ответы (1 шт):
Если следовать этой логике, то можно сделать так:
x_j_list = [(0.05 * np.pi * j) for j in range(0, 21)]
point_elem_j,order = 1,4
x_col_list = [0.0, 0.3141592653589793, 0.6283185307179586, 0.9424777960769379]
poly_n = x_j_list[point_elem_j] - x_col_list[0] # считаем первый элемент
parameters_list = [poly_n] # помещаем первый элемент в итоговый список
for args, elems in enumerate(x_col_list[1:]): # итерируемся по списку, начиная со второго элемента (индекс == 1)
poly_n = (x_j_list[point_elem_j] - elems) * poly_n # считаем второй и последующие элементы
parameters_list.append(poly_n) # и помещаем их в список
print('Длина parameters_list: ', len(parameters_list))
print('Список parameters_list: ', parameters_list)
Длина parameters_list: 4
Список parameters_list: [0.15707963267948966, -0.024674011002723394, 0.011627353755112431, -0.009132102284437726]
Разница в расчетах у вас возникала в связи с тем, что на каждой итерации цикла значение poly_0 сбрасывалось на первоначальное, т.е. операция poly_0 = poly_n была вхолостую. Если бы вы вынесли poly_0 = x_j_list[point_elem_j] - x_col_list[0] до начала цикла, результат был бы правильным. Этим также объясняется корректность первых двух элементов - они рассчитываются и заносятся в список до операции poly_0 = poly_n.
