Если я правильно интерпретировать то, что вы хотели сделать из вашего объяснения и код:
def perturbate(x, h):
"""
Given an initial point x = [x0, x1, ..., xn]
Returns a list of points containing the original point and,
for every coordinate, "perturbations" of that point created
by adding and subtracting 'h' to the coordinate.
"""
# start with the original point plus
# 2 copies of it for every coordinate
points = [x[:] for i in range(len(x)*2 + 1)]
for coordinate_index in range(len(x)):
points[coordinate_index*2 + 1][coordinate_index] -= h
points[coordinate_index*2 + 2][coordinate_index] += h
return points
Что дает:
>>> perturbate([1.0,2.0], 1.0)
[[1.0, 2.0], [0.0, 2.0], [2.0, 2.0], [1.0, 1.0], [1.0, 3.0]]
Так в основном ваш код был почти правильно (но не совсем понятно, , переменные с общим именем не помогают), за исключением инициализации «результатов»: когда вы делаете [x] * 5
, где x
- изменяемый объект, вы создаете список из 5 раз того же объекта , Если вы измените свойство этого объекта, оно изменится во всех индексах, потому что они ссылаются на один и тот же объект!
>>> a = [[0,0]] * 5
>>> a
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
>>> a[0][0] = 1
>>> a
[[1, 0], [1, 0], [1, 0], [1, 0], [1, 0]]
>>>
Кроме того, предполагается, жестко 5
2-мерных точек. Но если мы предполагаем 2-мерные точки, то почему использовать len точки вместо того, чтобы просто использовать более простую и понятную «жестко запрограммированную» реализацию?
'[х] * 5' составляет список, где все элементы являются ссылками на тот же список. измените это на '[x [:] для i в диапазоне (5)]', чтобы создать копию каждого списка. –
. Ваш вопрос для меня не имеет смысла. Вы начинаете с того, что говорите, что у вас есть список с одним элементом, я думаю («[x0 x1]» означает «[(x0, x1)]??), Тогда ваш предлагаемый код пытается ссылаться на вложенный список? –
Вам нужна функция для точек в плоскости (т. Е. С двумя координатами), как предлагает ваше объяснение; или точек с произвольным числом координат, как кажется, кажется вашим «примерным» кодом (который имеет много ошибок)? – LeartS