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

Python中如何用一行代码按列拼接多维列表数组?

通用一行列表推导式解决方案

嘿,这个需求其实用zip()配合列表推导式就能完美搞定,不管你有多少个子数组都能通用!

核心思路

你的需求本质是把所有子数组的对应行拼接起来——比如第1行是第一个子数组的第1行 + 第二个子数组的第1行 + ... + 第N个子数组的第1行。zip(*input)正好能帮我们把所有子数组的对应行打包成一组,之后只需要把每组里的小列表拼接就行。

方案1:简洁版(适合大多数场景)

input_data = [[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]]
result = [sum(row_group, []) for row_group in zip(*input_data)]
print(result)
# 输出: [[1,2,7,8],[3,4,9,10],[5,6,11,12]]
  • zip(*input_data)会将输入的子数组“转置”,把对应行打包成元组:比如示例里会得到([[1,2], [7,8]], [[3,4], [9,10]], [[5,6], [11,12]])
  • sum(row_group, [])的作用是把每组里的多个小列表拼接成一个大列表(用空列表作为初始值,依次累加每组里的子列表)

方案2:高效版(适合处理大列表)

如果你的数据量很大,sum()的列表拼接效率会稍低,推荐用嵌套列表推导式展开:

result = [[item for subrow in row_group for item in subrow] for row_group in zip(*input_data)]

这个写法和方案1效果完全一致,但底层是直接遍历元素构建新列表,性能更优。

为什么你之前的尝试没生效?

  • 你写的[[element for table in input for element in row] for row in table]:这里table在第二层推导式里还没被定义(作用域问题),外层的for table in input是在第一个推导式的循环里,内层无法直接引用。
  • [[*input[j][i] for j in range(len(input))] for i in range(len(input[0]))]:语法错误,*不能直接放在列表推导式的元素位置,而且这种写法需要手动遍历索引,远不如zip()简洁通用。

多子数组测试

比如给输入加第三个子数组:

input_data = [[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]],[[13,14],[15,16],[17,18]]]
result = [sum(row_group, []) for row_group in zip(*input_data)]
print(result)
# 输出: [[1,2,7,8,13,14],[3,4,9,10,15,16],[5,6,11,12,17,18]]

完全能正常工作,不需要修改代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:07:45