Перечень и обновление списка списков Python - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь изменить элемент в последнем индексе элементов списка в z-списке, но получаю ошибку

l=['n1','n2','n3','n4']
path=['x','n1','y','z','n2']
y = ['n']
path+= y
d=0
seen = set()
for i in l:
   if i in path:
     f=0
   else:
      d+=1
      seen.add(i)


n=0
z = [[]]*d
for i in seen:
   z[n] = path
   z[n][-1] = i
   n+=1
print(z)

z должно быть

[['x', 'n1', 'y', 'z', 'n2', 'n3'], ['x', 'n1', 'y', 'z', 'n2', 'n4']] 

, но его выдачапоследний индекс элементов списка только как n3, т. е.

 [['x', 'n1', 'y', 'z', 'n2', 'n3'], ['x', 'n1', 'y', 'z', 'n2', 'n3']] 

Я не могу понять, почему он не дает правильного результата.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Это можно сделать в одну строку:

z = [path +[i] for i in l if i not in path]
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 helping.py 
[['x', 'n1', 'y', 'z', 'n2', 'n3'], ['x', 'n1', 'y', 'z', 'n2', 'n4']]
0 голосов
/ 20 сентября 2018

Вы присваиваете ссылку path на z[n] в каждой вашей итерации и вносите изменения в последний элемент списка, чтобы изменения не только z[n], но и path.Вместо этого вам следует назначить копию path для z[n].

Изменить:

z[n] = path

на:

z[n] = path[:]
...