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

如何将named tuples数组转换为数组构成的named tuple?

实现方案

1. 最简常规实现

如果可以接受一次拷贝生成列表,一行代码即可完成转换:

from collections import namedtuple

# 示例命名元组定义
Point = namedtuple('Point', ['a', 'b'])
# 原始数据
origin_list = [Point(a=1, b=1), Point(a=2, b=4), Point(a=3, b=9)]

# 核心转换代码
result = Point(*map(list, zip(*origin_list)))

执行后得到的result就是你需要的结构:Point(a=[1, 2, 3], b=[1, 4, 9])。

2. 惰性零拷贝实现

如果要避免数据拷贝、支持惰性取值,可以给每个字段返回生成器,只有遍历的时候才会从原始数据中取值,完全没有额外内存开销:

result = Point(*((getattr(p, field) for p in origin_list) for field in Point._fields))

这种实现下result.a和result.b都是生成器迭代器,相当于原始数据的视图,原始数据修改后遍历得到的值也会同步更新。

如果你不需要修改返回的序列,也可以直接用result = Point(*zip(*origin_list)),Python3中zip本身就是惰性迭代器,同样不需要拷贝数据,只是每个字段返回的是不可修改的元组类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:02