2017-01-30 63 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

您可以记录所有需要移除的元素,并在迭代后将其移除。 –