Python无需numpy/groupby 提取子列表同位置元素生成新二维列表
实现方案
你要实现的是二维列表的转置操作,用Python内置函数即可一行完成,无需引入numpy等第三方库:
main_list = [[2,3,10],[5,8,1]] # 写法1:列表推导式,可读性更高 new_list = [list(col) for col in zip(*main_list)] # 写法2:配合map函数,更简洁 # new_list = list(map(list, zip(*main_list))) print(new_list) # 输出 [[2,5],[3,8],[10,1]]
原理解释
*main_list是解包操作,将二维列表的每一个子列表作为独立参数传入zip函数zip函数会按索引位置依次取各个入参列表的元素,拼接成元组返回,刚好对应你要的「同位置元素组合」的需求- 外层的
list()转换是将zip返回的元组转为列表类型,匹配你要求的子列表格式
不等长子列表适配
如果你的输入中各子列表长度不一致,zip会默认按最短的子列表长度截断。如果需要按最长子列表长度处理、空缺位置补默认值,可以使用itertools.zip_longest:
from itertools import zip_longest main_list = [[2,3,10], [5]] new_list = [list(col) for col in zip_longest(*main_list, fillvalue=0)] print(new_list) # 输出 [[2,5], [3,0], [10,0]]
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

