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

如何从多个嵌套列表中提取子列表单侧元素生成两个新列表?

问题描述

现有多个嵌套列表示例如下:

list1 = [[1,2],[56,32],[34,244]]
list2 = [[43,21],[30,1],[19,3]]
list3 = [[1,3],[8,21],[9,57]]

所有子列表仅包含两个元素,且所有外层列表的子列表数量一致。需要生成两个新列表:

right_side = [2,32,244,21,1,3,3,21,57]
left_side = [1,56,34,43,30,19,1,8,9]

如何实现该需求?

解决方案

这里有几种Python实现的方法,按需选择:

方法1:列表推导式(简洁高效)

先把所有输入列表整合到一个大列表里,然后通过列表推导式分别提取每个子列表的左右元素:

list1 = [[1,2],[56,32],[34,244]]
list2 = [[43,21],[30,1],[19,3]]
list3 = [[1,3],[8,21],[9,57]]

all_lists = [list1, list2, list3]
left_side = [sublist[0] for lst in all_lists for sublist in lst]
right_side = [sublist[1] for lst in all_lists for sublist in lst]

print(left_side)  # 输出: [1, 56, 34, 43, 30, 19, 1, 8, 9]
print(right_side) # 输出: [2, 32, 244, 21, 1, 3, 3, 21, 57]

这种写法是Python的惯用风格,代码短且效率高。

方法2:嵌套循环(新手友好)

如果觉得列表推导式的双层循环不好理解,用普通嵌套循环逐个添加元素更直观:

list1 = [[1,2],[56,32],[34,244]]
list2 = [[43,21],[30,1],[19,3]]
list3 = [[1,3],[8,21],[9,57]]

all_lists = [list1, list2, list3]
left_side = []
right_side = []

for lst in all_lists:
    for sublist in lst:
        left_side.append(sublist[0])
        right_side.append(sublist[1])

print(left_side)
print(right_side)

逻辑很直白:先遍历每个外层列表,再遍历里面的子列表,把每个子列表的第一个元素丢进left_side,第二个丢进right_side。

方法3:itertools优化(处理大量数据)

如果你的输入列表特别多或者子列表数量极大,用itertools.chain可以避免生成中间大列表,节省内存:

import itertools

list1 = [[1,2],[56,32],[34,244]]
list2 = [[43,21],[30,1],[19,3]]
list3 = [[1,3],[8,21],[9,57]]

all_lists = [list1, list2, list3]
flattened = itertools.chain.from_iterable(all_lists)

left_side = []
right_side = []
for item in flattened:
    left_side.append(item[0])
    right_side.append(item[1])

print(left_side)
print(right_side)

chain.from_iterable会逐个生成子列表,不会一次性把所有子列表都加载到内存里,适合处理大规模数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:20:36