python - 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']]
我无法弄清楚为什么它没有给出正确的结果。
解决方案
path
您在每次迭代中分配to的引用z[n]
并对列表的最后一个元素进行更改,因此不仅z[n]
会更改,还会path
获得更改。path
您应该分配to的副本z[n]
。
改变:
z[n] = path
至:
z[n] = path[:]
推荐阅读
- javascript - 如何同时使用socket.io和express?
- azure-devops - 如何在 Azure DevOps 构建代理上构建 VS 扩展?
- python - 获取响应标头发布请求python
- java - 如何在菜单中添加按钮(在 Android Studio 中)
- android-studio - 未调用 Android Studio 广播接收器
- c++ - 如何在数组中找到第n个元素?
- android - 在产品风味中添加多个 google-service.json 文件
- sql-server - 从高版本到低版本备份和还原 SQL Server 数据库
- php - 数据库修改的典型 Gearman 流程是什么?
- kubernetes - 错误-Getsockopt:连接被拒绝 - Kubernetes apiserver