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

嵌套列表元素提取:如何转换嵌套元组列表为目标数字列表

解决嵌套元组列表的元素提取问题

首先得说清楚你之前为啥没得到正确结果:你用的l=[x[1] for x in l0],这里的x是l0里的每一个子列表(比如[('x0', 2), ('x1', 3)]),所以x[1]取的是子列表里的第二个元组,自然得到[('x1', 3), ('x3', 7)],这不是你想要的,得遍历到子列表里的每个元组才行。

需求1:保留层级结构,得到非扁平化列表 [[2,3],[5,7,1]]

这个需要两层列表推导式,外层遍历l0里的每个子列表,内层遍历子列表里的每个元组,提取元组的第二个元素:

l0 = [[('x0', 2), ('x1', 3)], [('x2', 5), ('x3', 7), ('x4', 1)]]
l = [[item[1] for item in sublist] for sublist in l0]
print(l)  # 输出: [[2, 3], [5, 7, 1]]

也可以用普通循环实现,逻辑是一样的:

l = []
for sublist in l0:
    temp = []
    for item in sublist:
        temp.append(item[1])
    l.append(temp)

需求2:扁平化列表,得到 [2,3,5,7,1]

有几种简单的实现方式:

方法1:单层嵌套的列表推导式

把两层循环合并到一个推导式里,顺序是外层循环在前,内层在后:

l = [item[1] for sublist in l0 for item in sublist]
print(l)  # 输出: [2, 3, 5, 7, 1]

方法2:用itertools.chain扁平化嵌套结构

如果嵌套层数更多或者列表很大,用itertools.chain会更高效:

from itertools import chain
l = [item[1] for item in chain(*l0)]
# 或者写成 chain.from_iterable(l0),不用解包*
# l = [item[1] for item in chain.from_iterable(l0)]
print(l)  # 输出: [2, 3, 5, 7, 1]

方法3:用sum快速扁平化(适合小型列表)

sum(l0, [])可以把嵌套列表合并成一个单层列表,不过这种方法在列表很大时效率不高,只适合小数据量:

l = [item[1] for item in sum(l0, [])]
print(l)  # 输出: [2, 3, 5, 7, 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:38