2015-11-13 3 views
0

Я пытаюсь получить следующую рекурсивную функцию для работы. Предполагается найти самый большой список векторов в vspace (n), так что все векторы будут, по крайней мере, расстоянием d друг от друга. Моя текущая проблема заключается в том, что переменная золь, похоже, не ведет себя локально. По какой-то причине, когда код переходит к более ранним итерациям, переменная sol не возвращается к тому, что было в этой итерации bestCode. Есть идеи?Объем аргумента функции

rlist - функция, которая уменьшает список векторов, удаляя любые, которые слишком близки к x (меньше расстояния d).

def bestCode(n, d, sol): 
    best=[] 
    v = vspace(n) 
    for i in range(0, len(sol)): 
     v = rlist(sol[i], v, d) 
    if(len(v) != 0): 
     for i in range(0, len(v)): 
       sol2 = sol 
       sol2.append(v[i]) 
       sol2 = bestCode(n, d, sol2) 
      if(len(sol2)>len(best)): 
       best = sol2 
     return best 
    else: 
     return sol 
+3

Кроме того: 'for i in range (0, len (v)): v [i]' - длинный, подверженный ошибкам способ записи 'для элемента в v: element'. –

+0

Можете ли вы исправить отступы, чтобы этот код действительно работал? –

+0

Возможный дубликат [Как передать переменную по ссылке?] (Http://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference) – Kevin

ответ

2

Python - ссылки на объекты. Назначение, такое как sol2 = sol, просто создает новую ссылку на объект. Для изменяемых объектов, таких как списки, изменения в sol2 видны sol, потому что они оба ссылаются на один и тот же список. Если вы хотите, чтобы sol2 был независимым, вам необходимо скопировать. Для списков обычный способ сделать это - sol2 = sol[:].

Смежные вопросы