如何将Python列表转换为不同长度子列表并按特定方式填充?
按列填充规则生成嵌套列表
给定原列表:
big_list = [1,2,3,4,5,6,7,8]
以及子列表长度要求 [1,2,3,2],需要生成符合以下规则的嵌套列表:
list_of_lists = [[1],[2,5],[3,6,8],[4,7]]
填充规则为:先填充每个子列表的第1个元素,再填充第2个元素,以此类推,直到所有元素分配完毕。
实现思路
核心是按"轮次"分配元素:每一轮对应子列表的第n个位置,遍历所有子列表,只要该子列表的长度要求大于当前轮次(说明它需要这个位置的元素),就从原列表中取元素填充进去。
代码实现
big_list = [1,2,3,4,5,6,7,8] lengths = [1,2,3,2] # 初始化空的嵌套列表 list_of_lists = [[] for _ in lengths] current_pos = 0 # 计算需要填充的总轮次(等于最长子列表的长度) max_round = max(lengths) for round_num in range(max_round): # 遍历每个子列表,检查是否需要填充当前轮次的元素 for idx, sub_length in enumerate(lengths): if sub_length > round_num: list_of_lists[idx].append(big_list[current_pos]) current_pos += 1 print(list_of_lists) # 输出结果:[[1], [2, 5], [3, 6, 8], [4, 7]]
逻辑说明
- 先根据长度列表初始化对应数量的空列表,作为嵌套列表的框架。
- 以最长子列表的长度作为总轮次,每一轮对应子列表的第
round_num个元素位置(从0开始计数)。 - 每一轮中,对每个子列表判断:如果它的长度要求大于当前轮次,说明这个位置需要填充元素,就从原列表的当前位置取元素添加进去,同时移动原列表的指针。
- 循环结束后,所有元素会按规则分配到对应的子列表中。
内容的提问来源于stack exchange,提问作者abra
相关产品推荐
相关产品推荐

