Voici mon code
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
Dans la dernière ligne, je ne peux pas définir le items[node.ind].v
valeur à node.v
comme je veux, et je reçois l'erreur
"AttributeError: can't set attribute"
Je ne sais pas ce qui ne va pas, mais ce doit être quelque chose basé sur la syntaxe en utilisant des déclarations comme node.v+=1
montre également la même erreur. Je ne connais pas encore Python, alors suggérez un moyen de rendre possible le changement ci-dessus.
items[node.ind] = items[node.ind]._replace(v=node.v)
(Remarque: Ne vous découragez pas pour utiliser cette solution en raison du trait de soulignement dans la fonction _replace. Spécifiquement pour les noms nommés, certaines fonctions ont un trait de soulignement qui n'est pas destiné à indiquer qu'elles sont censées être "privées".)
namedtuple
s sont immuables, tout comme les n-uplets standard. Vous avez deux choix:
Le premier ressemblerait à ceci:
class N(object):
def __init__(self, ind, set, v):
self.ind = ind
self.set = set
self.v = v
Et ce dernier:
item = items[node.ind]
items[node.ind] = N(item.ind, item.set, node.v)
Edit: si vous voulez ce dernier, la réponse d'Ignacio fait la même chose de manière plus nette en utilisant la fonctionnalité intégrée.