Итерация в Python выдает нежелательные результаты - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь назначить платежи, которые хранятся в векторе p, вектору долгов, который равен l, поэтому мне нужно сохранить даты платежа и выплаченную сумму для каждой даты платежа в соответствии с долгами.

Этот код предназначен для платежей только по первому долгу (254 000 долларов США) (позиция 0 в l): [62998, datetime.date (2019, 11, 29), 254000.0]

Желаемые результаты следующие:

  1. fechas_rec = [datetime.date (2020, 1, 30), datetime.date (2020, 2, 28)] вектор дат платежей
  2. p = [[ 10000.0, datetime.date (2020, 2, 28)], [110000.0, datetime.date (2020, 3, 30)]] обновите платежи, указав доступные суммы.
  3. recuperados = [137500.0,116500.0] вектор выплат по вектору точки 1.

Но при обновлении второй последней строки recuperados.append () с закомментированным кодом recuperados.append ('a') " , вывод первой точки меняется, вопрос почему?

Новый вывод:

fechas_rec=[datetime.date(2020, 2, 28), datetime.date(2020, 3, 30)]

Код:

l = [
    [62998, datetime.date(2019, 11, 29), 254000.0],
    [65317, datetime.date(2019, 12, 30), 229000.0],
    [66606, datetime.date(2020, 1, 31), 229000.0],
    [68751, datetime.date(2020, 2, 28), 228000.0],
    [70652, datetime.date(2020, 3, 24), 229000.0],
]

p = [
    [137500.0, datetime.date(2020, 1, 30)],
    [126500.0, datetime.date(2020, 2, 28)],
    [110000.0, datetime.date(2020, 3, 30)],
]


for j in l:
    fechas_rec = []
    recuperados = []
    suma = 0
    for i in enumerate(p):
        suma = suma + i[1][0]
        if suma <= j[2]:
            fechas_rec.append(i[1][1])
            recuperados.append(i[1][0])
        else:
            val = suma - j[2]
            c = i[1]
            del p[: i[0] + 1]
            p.insert(0, [val, c[1]])
            fechas_rec.append(i[1][1])
            recuperados.append()  # recuperados.append('a')
            break

1 Ответ

1 голос
/ 14 августа 2020

Код:

l = [
    [62998, datetime.date(2019, 11, 29), 254000.0],
    [65317, datetime.date(2019, 12, 30), 229000.0],
    [66606, datetime.date(2020, 1, 31), 229000.0],
    [68751, datetime.date(2020, 2, 28), 228000.0],
    [70652, datetime.date(2020, 3, 24), 229000.0],
]

p = [
    [137500.0, datetime.date(2020, 1, 30)],
    [126500.0, datetime.date(2020, 2, 28)],
    [110000.0, datetime.date(2020, 3, 30)],
]

for j in l:
    fechas_rec=[]
    recuperados=[]
    suma=0
    for i in enumerate(p):
        suma1=suma
        suma=suma+i[1][0]
        if suma<=j[2]:
            fechas_rec.append(i[1][1])
            recuperados.append(i[1][0])
        else:
            val=suma-j[2]
            c=i[1]
            del p[:i[0]+1]
            p.insert(0,[val,c[1]])
            fechas_rec.append(i[1][1])
            recuperados.append(j[2]-suma1) 
            break  
    drec.append([j[0],fechas_rec,recuperados])    
    sumtot=sumtot+sum(drec[-1][2])
    if sumtot==rectot:
        test=True       
    if test:
        break  
...