Ответ 1
items[node.ind] = items[node.ind]._replace(v=node.v)
Вот мой код
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, поэтому, пожалуйста, предложите способ сделать вышеуказанное изменение возможным.
items[node.ind] = items[node.ind]._replace(v=node.v)
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)
Изменить: если вы хотите последнего, ответ Игнасио делает то же самое более аккуратно, используя искушенные функции.