Python动态长度嵌套列表的转置实现问题
Python动态子列表长度的嵌套列表转置方法
问题场景
给定嵌套列表a,其内部子列表长度会动态增长(每次循环为每个子列表添加一个元素),需要将其转置:提取每个子列表的第n个元素,重组为新的嵌套列表。
示例
初始输入:
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
期望转置结果:
b = [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
动态更新后输入:
a = [[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]
对应转置结果:
b = [[1, 4, 7], [2, 5, 8], [3, 6, 9], [4, 7, 10]]
解决方案
方法1:使用zip(子列表长度一致时首选)
利用zip(*a)直接按列提取元素,再通过列表推导式转换为列表:
b = [list(col) for col in zip(*a)]
原理:*a将嵌套列表拆分为多个独立子列表传入zip,zip会依次取每个子列表的同位置元素组成元组,最后将元组转为列表即得到转置结果。
方法2:处理子列表长度不一致的情况(可选)
如果动态更新过程中存在子列表长度暂时不一致的情况,可使用itertools.zip_longest:
from itertools import zip_longest # fillvalue指定缺失位置的填充值,默认是None b = [list(col) for col in zip_longest(*a, fillvalue=None)]
方法3:手动循环实现(适合理解逻辑)
先获取最长子列表的长度,再逐个索引提取对应元素:
max_len = max(len(sublist) for sublist in a) b = [] for n in range(max_len): current_col = [] for sublist in a: if n < len(sublist): current_col.append(sublist[n]) b.append(current_col)
内容的提问来源于stack exchange,提问作者python_ftw
相关产品推荐
相关产品推荐

