我有这个代码:
lst = []
given = [1, 2, 3, 4, 5]
result = []
for item in given:
lst.append(item)
print(lst)
result.append(lst)
print(result)
我的预期结果是[[1], [1, 2], [1, 2, 3], ...]
,但显示的结果是 [[1, 2, 3, 4, 5], ...]
与 12345
重复5次。怎么了?
lst
打印的内容与预期一致,即 [1]
对于第一个循环,[ 1, 2]
第二个循环,依此类推。
最佳答案
每次将 lst
附加到 result
时,Python 不会创建它的副本,它只是插入引用。结果你得到了包含 N 个对同一列表的引用的列表。
要创建 lst
的副本,您可以使用 lst.copy()
。列表切片运算符的工作方式也相同lst[:]
。
代码的缩短版本:
given = [1, 2, 3, 4, 5]
result = [given[0 : i + 1] for i in range(len(given))]
print(result)
结果:
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
关于python - 附加在 for 循环中修改的变量无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53918732/