Python中能否实现列表嵌套?我的循环生成嵌套列表代码问题排查
嵌套列表生成问题的错误分析与解决
你想生成包含6个不同移位子列表的嵌套列表,但当前代码输出的所有子列表都是最后一次修改后的结果,无法达到预期。
错误原因
列表在Python中是可变对象,你每次执行ls.insert(0, a)时,并没有把a的当前内容复制一份存入ls,而是把a这个列表的引用添加到了ls里。后续循环中对a的修改(pop和insert操作)会直接影响所有已经存入ls的引用,最终ls里的所有元素都会指向同一个a,也就是最后一次循环修改后的状态。
另外,你的循环条件是i < 5,只会执行5次循环,加上初始空的ls,最终ls里只有5个元素,但你预期的是6个,这也是一个问题。
解决方案
- 每次向
ls中添加列表时,添加a的副本,而不是原列表引用。可以用以下几种方式创建副本:a.copy()list(a)- 切片操作
a[:]
- 调整循环次数,确保生成6个子列表。可以先把原始的
a副本加入ls,再执行5次循环;或者把循环条件改为i < 6。
修正后的代码示例
ls = [] a = ['a','b','c','d','e','f'] # 先加入原始列表的副本 ls.append(a.copy()) i = 0 while i < 5: x = a[-1] a.pop(-1) a.insert(0, x) # 添加当前a的副本 ls.append(a.copy()) i += 1 print(ls)
或者用更简洁的循环方式:
a = ['a','b','c','d','e','f'] ls = [] for _ in range(6): ls.append(a.copy()) # 执行移位操作 a = [a[-1]] + a[:-1] print(ls)
输出验证
运行修正后的代码,会得到你预期的嵌套列表:
[ ['a','b','c','d','e','f'], ['f','a','b','c','d','e'], ['e','f','a','b','c','d'], ['d','e','f','a','b','c'], ['c','d','e','f','a','b'], ['b','c','d','e','f','a'] ]
内容的提问来源于stack exchange,提问作者MRX yok
相关产品推荐
相关产品推荐

