Создание списка списков в Python - PullRequest
0 голосов
/ 02 мая 2018

Я работаю над финансовым калькулятором. В настоящее время у меня есть так, чтобы каждый раз, когда код циклически добавлялся к списку результатов. Я намерен, чтобы эти результаты были добавлены в новый список для введенного количества циклов. функции модификации обеспечат, чтобы первый список имел разные результаты в каждом цикле, так как он рандомизирует инфляцию и процентные ставки.

Например, входное значение sims равно 10, поэтому оно будет повторяться 10 раз. Каждый раз, когда он повторяется, он добавляет результаты списка в симуляции списка, а затем сбрасывает результаты списка. Это приведет к 10 различным спискам списков

В настоящее время я получаю нужные мне выходные данные, но во второй список добавляется только первый цикл, например, он просто повторяет первый цикл 10 раз вместо сброса и случайного выбора каждый раз.

def modify_rate(interest_rate, interest_change):

   return interest_rate + interest_change * (1 - random.random() * 2)

def modify_rate(inflation_rate, inflation_change):

   return inflation_rate + inflation_change * (1 - random.random() * 2)

def run_simulation():
years, annual_spend, savings_balance, inflation_rate, interest_rate, interest_change, inflation_change, sims  = inputs()
simulations = []
i = 0
 for x in range(0, sims):
    result = []
    while i < years:
        interest_rate = modify_rate(interest_rate, interest_change)
        inflation_rate = modify_rate(inflation_rate, inflation_change)
        i = i + 1
        totalcost = annual_spend * (1 + inflation_rate) ** 1
        annual_spend = totalcost
        totalsave = savings_balance - annual_spend
        savings_balance = totalsave
        x = savings_balance * (1 + interest_rate) ** 1
        savings_balance = round(x, 2)
        result.append(savings_balance)
        if i >=years:
            break
        elif savings_balance < 0:
            break
        simulations.append(result)
print(simulations)

Я создал мини-пример, в котором вычисление будет добавлено х раз, а затем результаты добавлены в список, который затем будет добавлен в другой список х раз

x = int(input("enter"))
y = int(input("enter"))
k = int(input("enter"))
a = []
i = 0
h= []
for x in range(0, k):
while i < y:
            i = i + 1
            z = x + 10 + i
            a.append(z)
            if i >= y:
                break
h.append(a)  
print(h)

Любое руководство будет оценено:)

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Я не уверен, что полностью понимаю ваш код, но в отношении вашего мини-примера вы хотите вычислить y количество раз, поместить результаты в список, и этот список будет добавлен в другой список k количество раз.

base_value = int(input("enter"))         # your x
nb_calculations = int(input("enter"))    # your y
nb_simulations = int(input("enter"))     # your k

final_list= []                           # your h

for value in range(nb_simulations):

    print('working on simulation: ', value)
    temp_list = []                       # your a
    i = 0                                # your i  


    while i < nb_calculations:
        print('working on calculation: ', i)

        new_value = base_value + 10 + i
        temp_list.append(new_value)

        print('base value: ', base_value)
        print('new value: ', new_value)
        print('temp list: ', temp_list)

        i += 1

    print('final temp list: ', temp_list)
    print('len temp list equal to nb_calculations: ', len(temp_list) == nb_calculations)

    final_list.append(temp_list)

    print('final list: ', final_list)
    print('len final list: ', len(final_list))

print('final list at the end: ', final_list)
print('len final list at the end: ', len(final_list))
print('len final list equal to nb_simulations: ', len(final_list) == nb_simulations)

Конечно, temp_list всегда будет таким же, как расчет всегда одинаковым. Но вычисление выполняется nb_calculations количество раз, результаты помещаются в список, и этот список добавляется в другой список nb_simulations количество раз.

0 голосов
/ 02 мая 2018

удалось решить, не уверен, что это был самый эффективный способ, но все равно плохо опубликую это

def run_simulation():
years, annual_spend, savings_balance, inflation_rate, interest_rate, interest_change, inflation_change, sims  = inputs()
simulations = []
loop = 0
for loop in range(0, sims):
    success = 0
    fail = 0
    initial1 = interest_rate
    initial2 = inflation_rate
    initial3 = annual_spend
    initial4 = savings_balance
    i = 0
    result = []
    while i < years:
        interest_rate = modify_rate(interest_rate, interest_change)
        inflation_rate = modify_rate(inflation_rate, inflation_change)
        i = i + 1
        totalcost = annual_spend * (1 + inflation_rate) ** 1
        annual_spend = totalcost
        totalsave = savings_balance - annual_spend
        savings_balance = totalsave
        x = savings_balance * (1 + interest_rate) ** 1
        savings_balance = round(x, 2)
        result.append(savings_balance)
        if i >=years:
            break
        elif savings_balance < 0:
            break
    simulations.append(result)
    inflation_rate = initial1
    interest_rate = initial2
    annual_spend = initial3
    savings_balance = initial4        
    loop =+1
0 голосов
/ 02 мая 2018
x = int(input("enter"))
y = int(input("enter"))
k = int(input("enter"))
h= []
for x in range(0, k):
    a = []
    i = 0
    while i < y:
            i += 1
            z = x + 10 + i
            a.append(z)
    h.append(a)  
print(h)

Каждый раз при выполнении цикла for список «a» автоматически сбрасывается, и вам не нужно указывать, выполняется ли условие в то время, как условие уже существует в то время, как

...