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

Python中for循环处理三维numpy数组生成列表的列表问题

解决嵌套列表的循环计算适配问题

先说说你代码里的核心问题:你写的for i in list(range(len(expected[i]))):犯了两个关键错误:

  • 变量i在循环启动前根本没定义,直接用expected[i]会立刻抛出索引错误;
  • 循环层级逻辑完全错配——你的expected是两层嵌套列表(外层有2个元素,每个元素是一个子列表,子列表里才是要计算的三元组),你需要先遍历外层的每个子列表,再遍历子列表里的单个元素。

正确的嵌套循环实现

我们用两层for循环来匹配原数组的结构,确保不管外层/内层列表长度怎么变,代码都能适配:

import numpy as np

expected = [[[45.0, 10.0, 10.0], [110.0, 10.0, 8.0], [60.0, 10.0, 5.0], [170.0, 10.0, 4.0]], [[-80.0, 20.0, 10.0], [97.0, 15.0, 12.0], [5.0, 20.0, 8.0], [93.0, 10.0, 8.0], [12.0, 5.0, 15.0], [-88.0, 10.0, 10.0], [176.0, 10.0, 8.0]]]

horizontal_expected = []
# 第一层循环:遍历外层的每个子列表
for sub_list in expected:
    sub_result = []
    # 第二层循环:遍历当前子列表里的每个三元组元素
    for elem in sub_list:
        # 拆解元素让逻辑更清晰,也可以直接用索引计算
        angle_deg = elem[0]
        val1 = elem[1]
        val2 = elem[2]
        horizontal_exp = val1 * val2 * np.cos(np.deg2rad(angle_deg))
        sub_result.append(horizontal_exp)
    # 将当前子列表的计算结果加入最终列表
    horizontal_expected.append(sub_result)

print(horizontal_expected)

更简洁的列表推导式写法

如果喜欢紧凑代码,可以用嵌套列表推导式,逻辑和上面的循环完全一致:

import numpy as np

expected = [[[45.0, 10.0, 10.0], [110.0, 10.0, 8.0], [60.0, 10.0, 5.0], [170.0, 10.0, 4.0]], [[-80.0, 20.0, 10.0], [97.0, 15.0, 12.0], [5.0, 20.0, 8.0], [93.0, 10.0, 8.0], [12.0, 5.0, 15.0], [-88.0, 10.0, 10.0], [176.0, 10.0, 8.0]]]

horizontal_expected = [
    [elem[1] * elem[2] * np.cos(np.deg2rad(elem[0])) for elem in sub_list]
    for sub_list in expected
]

print(horizontal_expected)

结果说明

这两种写法都会生成和原数组结构完全对应的嵌套列表:

  • 外层列表长度和expected一致(2个元素);
  • 每个内层列表的长度和原数组对应位置的子列表长度完全匹配(第一个4个元素,第二个7个元素),完美适配任意长度的嵌套结构。

内容的提问来源于stack exchange,提问作者Lucy Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:37