python - 您可以将列表存储到while循环内的列表中吗?
问题描述
我目前正在了解列表和 while 循环如何在 Python 中工作。不幸的是,我对我的代码有点困惑。
main_list = []
list_1 = [1, 2]
list_2 = [3, 4]
i = 0
n = 2
while i != n:
number = int(input("Insert a number: "))
list_1.append(number)
main_list.append(list_1)
main_list.append(list_2)
i += 1
print(main_list)
为什么我得到这个输出,
>> Insert a number: 2
>> Insert a number: 3
>> [[1, 2, 2, 3], [3, 4], [1, 2, 2, 3], [3, 4]]
而不是这个?
>> Insert a number: 2
>> Insert a number: 3
>> [[1, 2, 2], [3, 4], [1, 2, 2, 3], [3, 4]]
如果有人能给我解释一下,我将不胜感激,谢谢。
解决方案
那是因为您正在list_1
while 循环内部进行修改并将其附加到main_list
. 但是,当您追加时,只会将 的引用list_1
添加到main_list
.
现在最后的list_1
内容是[1,2,2,3]
. 并且由于main_list
包含对 的引用list_1
,main_list
因此显示其当前内容list_1
是[1,2,2,3]
。
为避免这种情况,您必须附加 的内容list_1
而不是对 的引用main_list
。有很多方法可以做到这一点。
其中之一是,
main_list.append(list(list_1))
将您现有的行更改为此。
请阅读此内容 -浅拷贝与深拷贝
推荐阅读
- jqassistant - 是否可以在独立的 Neo4J 服务器上运行 jQAssistant Dashboard?
- numpy - 计算数组中每个元素之间的距离
- python - pip install 可编辑错误:找不到模块 setuptools
- spring - Spring Batch 和 Azure SQL Server:SQL Server 没有返回响应。连接已关闭
- c++ - C++/WinRT 模板控制台应用和安装了 WinRT NuGet 的 C++ 控制台应用有什么区别?
- unix - 有没有办法在 Unix Shell 脚本中检查是否存在带有 glob * 的文件?
- authentication - 多台服务器的 Google 身份验证器
- javascript - Openlayers 6:在点聚类之前按属性过滤点向量层
- apache-camel - CamelContext Apache 骆驼
- c++ - 在非常量向量内的常数向量中的地址是否稳定?