python - 为什么 list.append() 在此代码中写入数据
问题描述
我正在尝试将一些列表附加到 for 循环中的另一个列表,但似乎 append 方法正在覆盖列表的先前数据。
listFil1 = ["R1000", "D940", "L143", "D182", ...]
position1 = [0,0]
position1list = []
for i in range(0, len(listFil1)):
#Get the move from each list
move1 = listFil1[i]
#evaluate position1
if move1[0] == "R":
position1[1] += int(move1[1:])
elif move1[0] == "L":
position1[1] -= int(move1[1:])
elif move1[0] == "U":
position1[0] += int(move1[1:])
elif move1[0] == "D":
position1[0] -= int(move1[1:])
#Append each move, this is where the problem is
position1list.append(position1)
如果我position1
在 for 循环内打印,我会得到每次迭代的预期结果: * [0, 1000] * [-940, 1000] * [-940, 857] * [-1122, 857] * [-1122 , -20] * [-1831, -20] * [-1831, -273] * [-1583, -273] * [-1583, -574] * [-1149, -574] * [-1149, 267 ] * [-434, 267] * [-434, 968] * ... * [-1966, -12739] * [-1966, -13333]
但是当我在最后打印position1list
时,在 for 循环之外,我得到了正确长度的数据,但列表中的每个项目都等于最后一个位置 1:[[-1966, -13333], [-1966, -13333 ], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333], [-1966, -13333],...]
代码的哪一部分使附加写入整个列表?我可以更改什么以获得最后所有职位的列表?
解决方案
您正在附加相同的列表引用,因此它们都具有相同的元素。每次追加时都应该做一个浅拷贝:
position1list.append(position1.copy())
推荐阅读
- azure - 将项目添加到服务总线的 Azure API 管理策略 - 应返回错误
- flutter - Flutter 使用 map 将数据从列表类对象加载到 DropdownMenuItem
- swift - Swift 中是否有 Kotlin 等效的“对象”?
- amazon-web-services - 如何将弹性 ip 分配给现有的 AWS 应用程序负载均衡器?
- android - 如何从我的 webview 应用程序(如 Instagram 等)打开其他应用程序?
- node.js - 一个 API 调用 vs 多个
- android - 如何从文档文件路径中获取内容 Uri?
- javascript - 转换 JavaScript 对象 - JavaScript
- excel - 为 Excel 工作表制作自动排序宏
- android - 如何使用带有 RxSupport 的新 Paging 库 3 实现 Paging 3 的 ItemKeyedDataSource,如 RxPagingSource