如何转置列表的列表?求简便实现及通用化方案
问题解答
1. 更简便的实现方法
Python内置的zip()函数可以直接完成转置操作,结合生成器表达式和tuple()转换,一行代码就能实现需求:
def list_of_list_to_tuple_of_tuple(ll): return tuple(tuple(col) for col in zip(*ll)) ll = [["a1","a2"],["b1","b2"],["c1","c2"]] print(list_of_list_to_tuple_of_tuple(ll)) # 输出:(('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'))
zip(*ll)会将列表的列表解包为多个独立列表,然后按位置提取元素生成转置后的迭代器,再将每个转置结果转为元组,最后整体转为元组即可。
2. 算法通用化适配n个元素的场景
上面的zip()方案本身就支持内部列表含任意n个元素的场景(前提是所有内部列表长度一致),无需额外修改代码。比如针对内部列表有3个元素的输入:
ll = [["a1","a2","a3"],["b1","b2","b3"],["c1","c2","c3"]] print(list_of_list_to_tuple_of_tuple(ll)) # 输出:(('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'), ('a3', 'b3', 'c3'))
原理是zip(*ll)会自动识别内部列表的长度,按位置依次提取每一列的元素,生成对应数量的转置结果,再统一转为元组结构,完美适配n个元素的场景。
内容的提问来源于stack exchange,提问作者Shck Tchamna
相关产品推荐
相关产品推荐

