【小算法】Python中对不定长度的集合,最大值为X,大于X的进行平均分组,如果不能平均分组的,每组相差不能超过1

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 算法刷题
  • 时间:2023-06-06 23:59
  • 2064人已阅读
简介 有list的长度是x,如果长度不大于20,就不分割,如果大于20进行平均分配,但是每组长度相差不能超过1。比如长度21分割两组,一组长度11一组长度10;再比如长度55,分三组,每组长度分别是19,18,18lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,&nbs

🔔🔔好消息!好消息!🔔🔔

 如果您需要注册ChatGPT,想要升级ChatGPT4。凯哥可以代注册ChatGPT账号代升级ChatGPT4

有需要的朋友👉:微信号 kaigejava2022

有list的长度是x,如果长度不大于20,就不分割,如果大于20进行平均分配,但是每组长度相差不能超过1。比如长度21分割两组,一组长度11一组长度10;再比如长度55,分三组,每组长度分别是19,18,18

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]

if len(lst) <= 20:
    result = [lst]
else:
    num_groups = len(lst) // 20 + (len(lst) % 20 > 0) # 计算需要分成多少组
    group_size = len(lst) // num_groups # 计算每组的基本大小
    remaining = len(lst) % num_groups # 计算剩余的元素数量
    result = []
    for i in range(num_groups):
        group = lst[i * group_size : (i+1) * group_size] # 按照基本大小取出元素
        if remaining > 0:
            group.append(lst[-remaining:]) # 如果还有剩余的元素,则追加到这一组中
            remaining -= 1
        result.append(group)

print(result)

解释:

首先,将需要分割的列表存储在变量lst中。对于长度不大于20的情况,直接将列表作为结果返回。对于长度大于20的情况,计算需要分成多少组(num_groups),基本上每组的大小(group_size),还有剩余的元素数量(remaining)。然后,使用for循环迭代每一组,按照基本大小(i * group_size : (i+1) * group_size)取出元素,并且如果还有剩余的元素,则追加到这一组中。最后,将所有组合成的结果存储在变量result中并返回。


TopTop