問題:最近遇到一個小問題,需要對列表中的元素分組,保證每組元素的和盡可能平衡,最后返回每組的值和所對應的下標,這里對處理辦法進行記錄,方便以后查看。
解決思路:
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
例子: