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

如何在Python中展开numpy数组中作为元素的列表?

展开numpy数组中的列表元素

这个问题其实挺常见的,尤其是当你拿到的numpy数组是object类型、混合了标量和列表元素时,我们只需要把每个列表元素拆成单独的列,再和原有的标量列拼接起来就行。下面给你两种实用的解决办法:

方法一:分步处理(清晰易懂)

先模拟你的输入数组,然后一步步展开:

import numpy as np

# 模拟你的输入结构
arr = np.array([[0, 301227, 0.863, 0.456, -3.551, 0.532, 135.96200000000002, 4,
                 [0.49, 0.33, 0.33, 0.28, 0.26, 0.47, 0.28, 0.29, 0.41, 0.42, 0.85, 0.48],
                 [53.09, 119.1, 36.67, -1.91, 11.38, -20.86, -0.56, 4.01, -3.51, 0.9, -8.72, 1.04],
                 66.66666666666667, 1.0]])

# 初始化空列表存储展开后的行
expanded_rows = []
for row in arr:
    # 拆分每行中的非列表元素和列表元素
    non_list_items = [item for item in row if not isinstance(item, list)]
    list_items = [np.array(item) for item in row if isinstance(item, list)]
    
    # 横向拼接非列表元素和展开后的列表元素
    expanded_row = np.hstack([non_list_items] + list_items)
    expanded_rows.append(expanded_row)

# 把所有展开后的行纵向拼接成最终数组
expanded_arr = np.vstack(expanded_rows)

方法二:简洁的一行式写法

如果你喜欢更紧凑的代码,可以用列表推导式直接完成:

import numpy as np

# 同样模拟输入
arr = np.array([[0, 301227, 0.863, 0.456, -3.551, 0.532, 135.96200000000002, 4,
                 [0.49, 0.33, 0.33, 0.28, 0.26, 0.47, 0.28, 0.29, 0.41, 0.42, 0.85, 0.48],
                 [53.09, 119.1, 36.67, -1.91, 11.38, -20.86, -0.56, 4.01, -3.51, 0.9, -8.72, 1.04],
                 66.66666666666667, 1.0]])

# 一行完成展开
expanded_arr = np.vstack([np.hstack([x if not isinstance(x, list) else np.array(x) for x in row]) for row in arr])

补充说明

如果已经把数组中的列表提前转换成了numpy数组(而不是Python列表),那代码还能更简单——直接去掉np.array(item)这一步就好,因为numpy数组可以直接被hstack拼接。

这样处理后,你原来的两个列表元素就会各自拆成12个独立的列,最终的数组会包含所有展开后的数值,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:37:29