如何批量将嵌套列表转换为按元素位置重组的新嵌套列表
嵌套列表的列转置实现
你需要将嵌套列表A转置为新的嵌套列表B——B的第n个子列表包含A中所有子列表的第n个元素,这本质上是嵌套列表的转置操作,下面是几种高效的实现方式:
示例说明
原列表:
A = [[100,200,300], [400,500,600], [1000,1500,300]]
转置后目标列表:
B = [[100,400,1000], [200,500,1500], [300,600,300]]
方法1:用内置zip()函数(推荐,高效简洁)
Python内置的zip()函数可以直接按位置配对多个可迭代对象的元素,完美适配转置需求。只需将zip()返回的元组迭代器转为列表即可:
A = [[100,200,300], [400,500,600], [1000,1500,300]] B = [list(column) for column in zip(*A)] print(B)
这种方法完全利用Python内置的高效实现,处理数百个子列表毫无压力。
方法2:手动索引遍历(适合理解原理)
如果想搞清楚底层逻辑,可以通过遍历子列表的索引,逐个收集对应位置的元素:
A = [[100,200,300], [400,500,600], [1000,1500,300]] # 假设所有子列表长度一致,取第一个子列表的长度作为列数 column_num = len(A[0]) B = [] for idx in range(column_num): # 收集每个子列表的第idx个元素 new_sub_list = [sub[idx] for sub in A] B.append(new_sub_list) print(B)
可选:处理子列表长度不一致的场景
如果你的嵌套列表存在长度不同的子列表,默认zip()会以最短子列表为准截断元素。若要保留所有元素,可使用itertools.zip_longest()来填充缺失值:
from itertools import zip_longest A = [[100,200], [400,500,600], [1000]] # fillvalue设置缺失元素的填充值,这里用None,可按需修改 B = [list(column) for column in zip_longest(*A, fillvalue=None)] print(B) # 输出:[[100, 400, 1000], [200, 500, None], [None, 600, None]]
内容的提问来源于stack exchange,提问作者bjuksel
相关产品推荐
相关产品推荐

