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

基于索引重排嵌套列表:实现灵活转换函数需求

问题描述

现有嵌套列表:

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

需要将其转换为按索引重新分组的新嵌套列表:

new_list = [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

要求编写一个函数实现该转换,且支持处理各种大小/长度的嵌套列表(包括子列表长度不一致的情况)。

解决方案

1. 子列表长度相等时的简便写法

直接用Python内置的zip()函数就能搞定,它会自动按位置把各个子列表的元素配对,最后转成列表即可:

def transpose_nested_list(nested_list):
    # zip(*nested_list)将原列表拆分为多个子列表,按索引配对成元组后转成列表
    return [list(group) for group in zip(*nested_list)]

# 测试示例
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(transpose_nested_list(nested_list))  # 输出: [[1,4,7], [2,5,8], [3,6,9]]

2. 子列表长度不等时的通用写法

如果原嵌套列表的子列表长度不一致,zip()会自动截断到最短子列表的长度。要是想保留所有元素,就用itertools模块的zip_longest(),它可以用指定值填充缺失的位置:

from itertools import zip_longest

def transpose_nested_list(nested_list, fill_value=None):
    return [list(group) for group in zip_longest(*nested_list, fillvalue=fill_value)]

# 测试不等长场景
nested_list = [[1, 2], [3, 4, 5], [6]]
print(transpose_nested_list(nested_list))  # 输出: [[1,3,6], [2,4,None], [None,5,None]]
# 自定义填充值为0
print(transpose_nested_list(nested_list, fill_value=0))  # 输出: [[1,3,6], [2,4,0], [0,5,0]]

这样不管原嵌套列表的子列表长度是否一致,都能正确完成转置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:15:10