python - 附加在 for 循环中修改的变量无法按预期工作

标签 python list

我有这个代码:

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/

相关文章:

arrays - 如何在 BASH 的列中输出数组的内容

c# - 根据其属性之一从 C# 列表中删除重复项

list - F# 嵌套列表不变性

python - 比较 python 元组以查找在上一个和下一个元组中也找到的值

Python argparse parse_args 到全局命名空间(或者这是一个坏主意的原因)

python - 从字典列表中动态创建嵌套 json 对象

python - Cython 用户的 Numpy 类型

python - 将 IP 范围扩展至列表

python - 在 UpdateView 的哪个点保存数据?

python - pandas' `str.extract()` 中带有捕获组的正则表达式的预期行为