python列表分组

  问题:最近遇到一个小问题,需要对列表中的元素分组,保证每组元素的和尽可能平衡,最后返回每组的值和所对应的下标,这里对处理办法进行记录,方便以后查看。  

  解决思路

    step1: 对列表进行排序,新建输出的空列表out_list[N];

    step2: 根据需要分组的个数$N$,每次遍历$N$个元素;

    step3: 循环执行step2,前后两次交替分配;

    step4: 处理最后未分配的元素,依次分配给out_list。

  代码

def listGroupBySum(arr, N):
    sorted_arr = sorted(enumerate(arr), key=lambda x:x[1])  # index: x[0]  value: x[1]
    out_list = [[] for i in range(N)]
    
    for i in range(len(arr) // N):
        for j in range(N):
            if i % 2 == 0:
                out_list[j].append(sorted_arr[i*N+j])
            else:
                out_list[N-j-1].append(sorted_arr[i*N+j])
    
    # the remain items of arr
    for i in range(len(arr) // N * N, len(arr)):
        out_list[i%N].append(sorted_arr[i])
        
    return out_list

  例子:

 

posted @ 2020-05-23 21:54  半夜打老虎  阅读(2712)  评论(0编辑  收藏  举报