Python 遍历和更新列表的列表
Python List of Lists traversing and updating
我正在尝试更改 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']]
我不明白为什么它没有给出正确的结果。
您在每次迭代中将 path
的引用分配给 z[n]
并更改列表的最后一个元素,因此不仅 z[n]
发生变化,而且 [=12] =] 得到改变。您应该将 path
的副本分配给 z[n]
。
变化:
z[n] = path
至:
z[n] = path[:]
这可以在一行中完成:
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']]
我正在尝试更改 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']]
我不明白为什么它没有给出正确的结果。
您在每次迭代中将 path
的引用分配给 z[n]
并更改列表的最后一个元素,因此不仅 z[n]
发生变化,而且 [=12] =] 得到改变。您应该将 path
的副本分配给 z[n]
。
变化:
z[n] = path
至:
z[n] = path[:]
这可以在一行中完成:
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']]