在while循环中迭代递增列表内整数,结果不符合预期的问题
问题原因与解决方案
问题原因
Python中的列表是可变对象,当你执行my_end_list.append(my_start_list)时,并没有把当前my_start_list的内容复制一份添加进去,而是把这个列表对象的引用添加到了my_end_list中。循环过程中,你始终在修改同一个列表对象的第一个元素,所以my_end_list里的所有子列表实际上都是指向同一个列表的引用。当循环结束后,这个列表的状态是[6,2,3,4],因此输出时所有子列表都显示这个最终状态。
解决方案
解决的核心是每次添加时,创建原列表的副本而非直接添加引用,常见的实现方式有两种:
方式1:使用列表的copy()方法
my_start_list = [1, 2, 3, 4] my_end_list = [] while my_start_list[0] != 6: my_start_list[0] += 1 my_end_list.append(my_start_list.copy()) # 创建列表副本后添加 print(my_start_list) print(my_end_list)
方式2:使用切片语法[:]生成副本
my_start_list = [1, 2, 3, 4] my_end_list = [] while my_start_list[0] != 6: my_start_list[0] += 1 my_end_list.append(my_start_list[:]) # 通过切片生成副本 print(my_start_list) print(my_end_list)
运行上述任意一段代码,都会得到你期望的输出:
[6, 2, 3, 4] [[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]
内容的提问来源于stack exchange,提问作者ste_b
相关产品推荐
相关产品推荐

