首页 > 解决方案 > Python List 遍历和更新列表

问题描述

我正在尝试更改 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']] 

我无法弄清楚为什么它没有给出正确的结果。

标签: pythontraversalnested-lists

解决方案


path您在每次迭代中分配to的引用z[n]并对列表的最后一个元素进行更改,因此不仅z[n]会更改,还会path获得更改。path您应该分配to的副本z[n]

改变:

z[n] = path

至:

z[n] = path[:]

推荐阅读