You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:57:16