如何按规则将普通列表转换为嵌套列表
解决列表按列分组转换的几种方法
嘿,这个转换其实就是把一维列表按列重新分组,我给你分享几种Python里简单易懂的实现方式,你可以根据自己的需求选:
方法1:列表推导式 + 步长切片(最简洁)
利用Python列表的切片特性,从不同起始索引开始,按步长3取元素:
main_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] ans_list = [main_list[i::3] for i in range(3)] print(ans_list) # 输出: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
原理:main_list[i::3]表示从索引i开始,每隔3个元素取一个值。循环i从0到2,正好生成三个符合要求的子列表。
方法2:分块后转置(通用场景适用)
如果你的列表长度是n*3(比如更长的列表),可以先按行分块,再通过转置得到列分组:
main_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 先按每3个元素分块,得到 [[1,2,3], [4,5,6], [7,8,9]] chunks = [main_list[i:i+3] for i in range(0, len(main_list), 3)] # 用*解包chunks,再zip转置,最后转成列表 ans_list = [list(group) for group in zip(*chunks)] print(ans_list)
这种方法扩展性更强,比如如果要分成4列,只需要把3改成4就行。
方法3:手动循环(适合理解底层逻辑)
如果想更直观地看到分组过程,可以用循环+取模的方式:
main_list = [1, 2, 3, 4, 5, 6, 7, 8, 9] ans_list = [[], [], []] # 初始化三个空列表 for idx, num in enumerate(main_list): # 索引对3取模,决定元素放到哪个子列表 ans_list[idx % 3].append(num) print(ans_list)
这种方式逻辑清晰,新手也能快速理解每一步的操作。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

