2017-01-30 66 views
0

我想要的金額分配給運營商,但追加的循環後沒有跳轉到另一個變量:的Python跳轉到另一個變量列表後追加

op1 = [] 
op2 = [] 
op3 = [] 
operators = [op1, op2, op3] 
unsigned_loans = [100, 200, 300, 400] 

sum_of_all_loans = 0 

for loan in unsigned_loans: 
    sum_of_all_loans += loan 

per_user_amount = sum_of_all_loans/len(operators) 

unsigned_loans.sort() 



for oper in operators: 
    for loan in unsigned_loans: 
     print(loan) 
     if sum(oper) < per_user_amount: 
      oper.append(loan) 
     unsigned_loans.remove(loan) 
    print(oper) 

輸出應該是:

op1=[100, 200] op2=[300] op3=[400] 

但現在它顯示

op1=[100, 300] op2=[200] op3=[400] 
+1

請解釋你想要的分佈背後的邏輯。目前你剛剛提到了代碼,它是爲它寫的。我們如何猜測你想要的結果背後的邏輯? –

回答

4

你是iterating over a list and modifying it at the same time,這總是會招致錯誤。如果你沒有從循環中的列表中獲得任何東西,它將更具可預測性。立即解決的辦法是迭代一個副本,因爲鏈接的頁面在接受的答案中提示。

或者,你可以稍微調整一下邏輯,總是給當前最低的運營商貸款:

for loan in unsigned_loans: 
    oper = min(operators, key=sum) 
    oper.append(loan) 

這將導致[100, 400], [200], [300]您的情況。

+0

是的,刪除後有一個問題,它錯過了列表中的第二個參數,但我想同時移除使用過的貸款。如何以另一種方式做到這一點? –

+1

您可以記錄所有需要移除的元素,並在迭代後將其移除。 –