Python循环追加列表出现自引用 如何得到预期嵌套列表
问题根因
原代码存在两个核心错误:
- 结果列表
I4定义在循环内部,每次遍历都会被重新赋值,无法累积所有子列表的转换结果 - 执行
I4.append(I4)时,是将列表自身作为元素追加到列表内部,直接造成循环自引用,因此输出时会出现[...]的递归引用标记,无法得到正确的嵌套结构。
原错误代码:
I3 = [[(0, 0), (0, 1)], [(0, 0), (1, 0)], [(0, 1), (1, 1)], [(1, 0), (1, 1)]] for t in range(0,len(I3)): I4 = [(j, -i) for i, j in I3[t]] I4.append(I4) print("I4 =",I4)
修正代码
首先在循环外部初始化空的结果列表I4,每次遍历I3的子列表完成坐标转换后,将转换得到的新子列表追加到I4中即可:
I3 = [[(0, 0), (0, 1)], [(0, 0), (1, 0)], [(0, 1), (1, 1)], [(1, 0), (1, 1)]] I4 = [] for t in range(len(I3)): # 生成当前子列表的坐标转换结果 converted_sub = [(j, -i) for i, j in I3[t]] # 将转换后的子列表追加到结果列表 I4.append(converted_sub) print("I4 =", I4)
运行输出与预期完全一致:
I4 = [[(0, 0), (1, 0)],[(0, 0), (0, -1)],[(1, 0), (1, -1)],[(0, -1), (1, -1)]]
也可以直接用嵌套列表推导式简化写法,无需显式写循环追加逻辑:
I3 = [[(0, 0), (0, 1)], [(0, 0), (1, 0)], [(0, 1), (1, 1)], [(1, 0), (1, 1)]] I4 = [[(j, -i) for i, j in sub] for sub in I3]
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

