如何在Python中按元素位置重组列表的列表
如何按元素位置转置嵌套列表?
给定嵌套列表:
list1 = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]
需要按元素位置创建新的嵌套列表,得到结果:
list2 = [['a', 'd', 'g', 'j'], ['b', 'e', 'h', 'k'], ['c', 'f', 'i', 'l']]
尝试了以下for循环代码,但仅生成一维列表:
res = [] for listing in list1: for i in list: res.append(i)
解决方法
方法1:使用Python内置zip()函数(最简洁)
zip()可以将多个可迭代对象对应位置的元素打包,结合列表推导式即可快速实现转置:
list1 = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']] list2 = [list(item) for item in zip(*list1)] print(list2) # 输出:[['a', 'd', 'g', 'j'], ['b', 'e', 'h', 'k'], ['c', 'f', 'i', 'l']]
*list1是解包操作,将原列表中的4个子列表作为独立参数传入zip();zip()会依次提取每个子列表的第0位、第1位、第2位元素打包成元组;- 最后通过列表推导式将每个元组转换为列表,得到目标嵌套列表。
方法2:手动编写循环(理解底层逻辑)
之前的循环未按位置分组,正确的循环逻辑需要按索引遍历元素位置,收集对应元素:
list1 = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']] res = [] # 外层循环遍历目标子列表的位置(共3个位置) for idx in range(len(list1[0])): sub_list = [] # 内层循环遍历原列表的每个子列表,收集对应索引的元素 for sub in list1: sub_list.append(sub[idx]) res.append(sub_list) print(res) # 输出:[['a', 'd', 'g', 'j'], ['b', 'e', 'h', 'k'], ['c', 'f', 'i', 'l']]
- 外层循环控制目标子列表的索引(0、1、2);
- 内层循环遍历原列表的每个子列表,将对应索引的元素添加到临时子列表中;
- 每个临时子列表构建完成后,添加到结果列表里。
内容的提问来源于stack exchange,提问作者Chase
相关产品推荐
相关产品推荐

