如何按字典指定的不等长规则拆分Python列表并保留原有顺序
Python按指定规则拆分列表实现方案
需求说明
有一个待拆分的列表,以及一个定义拆分规则的字典:字典的key对应拆分后结果的索引,value对应该索引下子列表的长度,要求拆分过程保留原列表的元素顺序。
示例输入
# 待拆分原列表 l = [14, 10, 2, 4, 12, 8, 8, 5, 9, 2, 7] # 拆分规则字典 dico = {0: 4, 1: 4, 2: 3}
期望输出
{0: [14, 10, 2, 4], 1: [12, 8, 8, 5], 2: [9, 2, 7]}
实现代码
def split_list_by_rule(raw_list, split_rule): result = {} current_start = 0 # 按索引升序遍历规则,保证拆分顺序正确 for idx in sorted(split_rule.keys()): sub_len = split_rule[idx] result[idx] = raw_list[current_start : current_start + sub_len] current_start += sub_len return result # 测试调用 if __name__ == "__main__": l = [14, 10, 2, 4, 12, 8, 8, 5, 9, 2, 7] dico = {0: 4, 1: 4, 2: 3} print(split_list_by_rule(l, dico))
代码说明
- 用
current_start变量记录每次切分的起始位置,初始值为0 - 对规则字典的key做升序排序后遍历,兼容所有Python版本的字典顺序问题,确保拆分顺序和原列表顺序一致
- 通过列表切片操作切取指定长度的子列表,自动保留原列表的元素顺序
- 每切完一个子列表就更新
current_start的位置,作为下一次切分的起始下标
运行上述代码即可得到符合要求的输出结果。
内容的提问来源于stack exchange,提问作者glouis
相关产品推荐
相关产品推荐

