如何将二维列表(2D-list)转置为列视图?
一行代码转置长度一致的二维列表
给定长度一致的二维列表:
l = [["a1", "b1", "c1"], ["a2", "b2", "c2"]]
需要将其转置为列视图,得到结果:
[['a1', 'a2'], ['b1', 'b2'], ['c1', 'c2']]
两种一行代码解决方案
方法1:利用zip()和map()(简洁高效)
l_col = list(map(list, zip(*l)))
- 原理:
*l将原二维列表拆分为两个独立子列表传入zip();zip()按索引位置配对元素,生成元组迭代器('a1','a2'), ('b1','b2'), ('c1','c2');map(list, ...)把每个元组转为列表,最后用list()将迭代器转成最终的二维列表。
方法2:嵌套列表推导式(与原逻辑等价)
l_col = [[x[i] for x in l] for i in range(len(l[0]))]
- 原理:把你原有的循环逻辑直接压缩为一行嵌套推导式,外层遍历原列表的列索引,内层遍历每一行取对应索引的元素,最终生成转置后的列表。
两种方法执行后,print(l_col)都会输出你期望的结果。
内容的提问来源于stack exchange,提问作者0x0fba
相关产品推荐
相关产品推荐

