Python append操作重复添加元素?二维列表子列表同步新增问题排查
问题根因
子列表同步更新是因为gallery初始化逻辑错误:[[]] * len(name)会创建一个空列表,再将该列表的引用复制指定次数,最终数组中所有子列表指向同一块内存地址,修改任意一个子列表都会同步到所有位置。
修复步骤
1. 修正初始化代码
用列表推导式生成独立的空列表,替换原有初始化逻辑:
# 错误写法 # gallery = [[]] * len(name) # 正确写法 gallery = [[] for _ in range(len(name))]
2. 修正上传逻辑的下标错误
业务代码中匹配到的文件下标为j,但调用上传接口时错误使用了Excel行下标i,会导致上传文件和匹配文件不一致,修改为:
# 错误写法 # url = storage.upload_plan_image(files[i]) # 正确写法 url = storage.upload_plan_image(files[j])
3. 修复数组取值越界风险
当前通过test_name[i]/test_type[i]/test_url[i]取值的逻辑存在问题:三个test_前缀数组的长度是累计匹配到的文件总数,下标i是Excel行号,二者没有对应关系,会出现取值错误。
可以直接省略三个test_数组的使用,直接将当前匹配到的变量存入gallery即可:
# 移除以下三行 # test_name.append([files[j]]) # test_type.append(img_type) # test_url.append(url) # 直接赋值 excel.gallery[i].append([files[j], img_type, url])
内容的提问来源于stack exchange,提问作者Freder
相关产品推荐
相关产品推荐

