问题:最近遇到一个小问题,需要对列表中的元素分组,保证每组元素的和尽可能平衡,最后返回每组的值和所对应的下标,这里对处理办法进行记录,方便以后查看。
解决思路:
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
例子: