Перечень и обновление списков Python

1

Я пытаюсь изменить элемент в последнем индексе элементов списка из списка 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']] 

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

  • 0
    это дает n3 как последние элементы обоих элементов списка из списка z. он должен дать n3 как последний элемент первого списка и n4 как последний элемент второго списка из списка z
  • 0
    Поместите несколько операторов print в свои циклы for для отладки вывода.
Показать ещё 1 комментарий
Теги:
nested-lists
traversal

2 ответа

4
Лучший ответ

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

Изменить:

z[n] = path

чтобы:

z[n] = path[:]
  • 0
    (что также делает z = [[]]*d (и всю переменную n , на самом деле) глупым)
1

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

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
    @ jay.rana oneline
  • 0
    любезно предоставлено @jdehesa

Ещё вопросы

Сообщество Overcoder
Наверх
Меню