Python中如何对元组构成的列表执行zip操作实现行列转置
Python元组列表转置实现方案
我们需要将结构为[(1, 2, 3), (4, 5, 6), (7, 8, 9)]的元组列表,转换为[[1, 4, 7], [2, 5, 8], [3, 6, 9]]的嵌套列表结构,本质是实现二维结构的行列转置。
实现代码
两种常用写法都可以实现需求:
写法1:map+zip组合
original = [(1, 2, 3), (4, 5, 6), (7, 8, 9)] result = list(map(list, zip(*original))) print(result) # 输出:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
写法2:列表推导式+zip
original = [(1, 2, 3), (4, 5, 6), (7, 8, 9)] result = [list(col) for col in zip(*original)] print(result) # 输出:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
原理说明
- 首先用
*original对原列表做解包操作,把列表内的三个元组拆成三个独立参数传入zip函数 - zip函数会按位置索引匹配所有传入参数的元素,返回迭代器,每个元素是相同索引位置的元素组成的元组:
(1,4,7)、(2,5,8)、(3,6,9) - 最后将每个元组转换为列表,再把整体转换为列表格式,就得到目标结果
注意事项
如果原列表中各元组的长度不一致,zip会自动以最短的元组长度为基准进行配对,超出的元素会被忽略。如果需要保留所有元素,可以改用
itertools.zip_longest方法实现。
内容的提问来源于stack exchange,提问作者shinorz0721
相关产品推荐
相关产品推荐

