Python如何将元组列表拆分为指定组数、长度可不均等的分组
指定分组总数拆分列表的实现
现有常见列表分块逻辑均为指定单个分块的元素个数,无法直接满足「固定拆分后的分组总数量」的需求,可通过动态计算单块长度实现目标效果:
- 核心计算规则:先获取列表总长度,结合指定的分组数,计算出每组的基础元素个数,以及分配完基础数量后剩余的元素个数;剩余元素按顺序分配到靠后的分组中,每个对应分组多分配1个元素,和示例中10个元素分3组、最终分组长度为3/3/4的规则完全匹配。
实现代码
my_list = [(12,383),(44,23428),(858,12),(1231,59540),(3242,569324),(11,58435),(32, 1231),(13123,34324),(441, 1485),(12111,3923)] # 指定需要拆分的总分组数 target_group_count = 3 total_len = len(my_list) base_chunk_size, extra_num = divmod(total_len, target_group_count) final = [] start_idx = 0 for group_idx in range(target_group_count): # 靠前的分组取基础长度,靠后的分组依次分配剩余的额外元素 current_chunk_size = base_chunk_size if group_idx < target_group_count - extra_num else base_chunk_size + 1 final.append(my_list[start_idx : start_idx + current_chunk_size]) start_idx += current_chunk_size # 打印结果 for chunk in final: print(chunk)
运行输出
[(12, 383), (44, 23428), (858, 12)] [(1231, 59540), (3242, 569324), (11, 58435)] [(32, 1231), (13123, 34324), (441, 1485), (12111, 3923)]
该逻辑适配列表长度动态变化的场景,不管是当前3000左右的元组量,还是后续每日新增元素,只要修改target_group_count的取值就能得到对应数量的分组,不会出现原有代码中固定单块长度、分组数随列表长度变动的问题。
内容的提问来源于stack exchange,提问作者KristiLuna
相关产品推荐
相关产品推荐

