如何将非3整除长度的列表拆分为3个近似等长的子列表?
拆分列表为近似等长子列表的简便实现
针对你给出的列表:
lst = [26, 5, 20, 23, 19, 24, 16, 27, 21, 3, 2, 10, 9, 18, 25, 8, 0]
要拆成3个近似等长的子列表,核心思路是先算总长度除以3的商和余数:总长度17,商是5,余数是2——意味着前2个子列表各多1个元素(即6个),最后1个是5个元素。
直接切片实现(快速解决当前问题)
直接用Python的切片语法就能搞定:
a = lst[:6] b = lst[6:12] c = lst[12:] # 结果验证 print(a) # [26, 5, 20, 23, 19, 24] print(b) # [16, 27, 21, 3, 2, 10] print(c) # [9, 18, 25, 8, 0]
通用函数实现(适配任意列表和拆分数量)
如果需要适配不同长度的列表或拆分更多组,可以写个通用函数:
def split_approx_equal(lst, num_groups): total = len(lst) base_len, remainder = divmod(total, num_groups) result = [] start = 0 for i in range(num_groups): # 前remainder组多1个元素 current_len = base_len + 1 if i < remainder else base_len end = start + current_len result.append(lst[start:end]) start = end return result # 调用函数拆分你的列表 a, b, c = split_approx_equal(lst, 3)
这个函数用divmod一次性算出基础长度和余数,然后循环分配每个子列表的起始和结束索引,逻辑清晰且复用性强。
内容的提问来源于stack exchange,提问作者Dila
相关产品推荐
相关产品推荐

