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

  例子:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM