В Python добавить элементы списка
Решаю задачу, в рамках которой пытаюсь заполнить новый список param_list. Логика формирования его элементов представлена ниже:
В результате же реализации моего кода в список добавляется лишь первый элемент poly_0 = x_j - x_col_list[0]. Он равен 0.157 - 0 = 0
Что не так в коде?
Код:
params_list = []
x_j = 0.157
x_col_list = [0.0, 0.3142, 0.6283]
for args in range(order): # args = 0,1,2
poly_0 = x_j - x_col_list[0]
if not args:
params_list.append(poly_0)
poly_n = (x_j - x_col_list[args])
if not args:
param_list.append(poly_n)
poly_0 = poly_n
print(params_list)
Ответы (2 шт):
У вас две ошибки в:
if not args:
param_list.append(poly_n)
Надо:
if args:
params_list.append(poly_n)
Кроме того, order "вручную" на 3 выставить пришлось.
Полный код, работающий у меня - ниже. На выходе: [0.157, -0.15719999999999998, -0.47129999999999994]
params_list = []
x_j = 0.157
x_col_list = [0.0, 0.3142, 0.6283]
for args in range(3): # args = 0,1,2
poly_0 = x_j - x_col_list[0]
if not args:
params_list.append(poly_0)
poly_n = (x_j - x_col_list[args])
if args:
params_list.append(poly_n)
poly_0 = poly_n
print(params_list)
Не надо писать условные операторы. Ищите общий случай, а не подбирайте исключения.
product накапливает текущее произведение. x_i пробегает значения из x_col_list. params_list - хранит результат - накопленные произведения:
x_j = 0.157
x_col_list = [0.0, 0.3142, 0.6283]
params_list = []
product = 1
for x_i in x_col_list:
product *= x_j - x_i
params_list.append(product)
print(params_list)
$ python temp.py [0.157, -0.024680399999999998, 0.011631872519999998]
Можно вовсе обойтись без цикла. itertools.accumulate вычисляет последовательные произведения:
import itertools
import operator
x_j = 0.157
x_col_list = [0.0, 0.3142, 0.6283]
params_list = list(itertools.accumulate(
(x_j - x_i for x_i in x_col_list),
operator.mul
))
print(params_list)
