Подтвердить что ты не робот

AttributeError: невозможно установить атрибут в python

Вот мой код

N = namedtuple("N", ['ind', 'set', 'v'])
def solve()
    items=[]
    stack=[]
    R = set(range(0,8))
    for i in range(0,8):
        items.append(N(i,R,8))      
        stack.append(N(0,R-set(range(0,1)),i))
    while(len(stack)>0): 
        node = stack.pop()
        print node
        print items[node.ind]   
        items[node.ind].v = node.v

В последней строке я не могу установить значение items[node.ind].v в node.v, как я хочу, и получаю ошибку

"AttributeError: can't set attribute"

Я не знаю, что неправильно, но должно быть что-то, основанное на синтаксисе, поскольку использование таких операторов, как node.v+=1, также показывает ту же ошибку. Я новичок в Python, поэтому, пожалуйста, предложите способ сделать вышеуказанное изменение возможным.

4b9b3361

Ответ 1

items[node.ind] = items[node.ind]._replace(v=node.v)

Ответ 2

namedtuple неизменяемы, как и стандартные кортежи. У вас есть два варианта:

  • Использовать другую структуру данных, например. класс (или просто словарь); или
  • Вместо обновления структуры замените его.

Первый будет выглядеть так:

class N(object):

    def __init__(self, ind, set, v):
        self.ind = ind
        self.set = set
        self.v = v

И последнее:

item = items[node.ind]
items[node.ind] = N(item.ind, item.set, node.v)

Изменить: если вы хотите последнего, ответ Игнасио делает то же самое более аккуратно, используя искушенные функции.