Изменение каждого элемента в списке, а затем всех элементов в списке с функцией - PullRequest
0 голосов
/ 13 июля 2020

У меня есть список с процентными ставками, показанный ниже:

rates = [
    -0.0005710,
    -0.001913,
]

У меня есть функция, которая принимает этот список в качестве входных данных и рассчитывает различные метрики риска. Однако я хочу сначала установить sh базовый уровень, используя этот список, вернув исходный список. Затем я хочу добавить 0,001 для каждого элемента в списке, а затем вернуть список. Наконец, я хочу добавить 0,001 ко всем элементам в списке. Я бы взял список ставок, а затем вернул бы следующие списки:

rates_adjusted = [
    -0.0005710,
    -0.001913,
]

rates_adjusted = [
    0.000429,
    -0.001913,
]

rates_adjusted = [
    -0.0005710,
    -0.000913,
]

rates_adjusted = [
    0.000429,
    -0.000913,
]

Сначала я возвращаю обычный список, затем я возвращаю новый список для каждого элемента в списке, но добавляю 0,001 к одному из элементов. Есть ли способ сделать это сразу в for-l oop? Я пробовал делать поэлементно с for l oop с помощью enumerate, но тогда мне не хватает базовой линии и той части, где я меняю все элементы сразу.

1 Ответ

1 голос
/ 13 июля 2020

Это можно сделать двумя способами - вот один из них, и я объясню, как мы go вместе:

rates = [-0.0005710, -0.001913,0.01034] # I modified your list by adding one element just to demonstrate
adjs = {} # create a dictionary to house the resulting lists
adjs['rates_unadjusted']=rates #first entry in the dictionary - the original list
for i in range(len(rates)):
    tmp_rates = rates.copy() #make a copy of the original list so the next iteration isn't affected
    tmp_rates[i] = tmp_rates[i] +0.001 #adjust the current list element
    adjs[f'rates_adjusted_{i+1}']  = tmp_rates # append the resulting list to the dictionary with a name reflecting its position
final = rates.copy() #now adjust all entries at once and append to the dictionary
for rate in rates:
    final[rates.index(rate)] = rate+0.001
adjs['final_rates']  = final
adjs

Вывод:

{'rates_unadjusted': [-0.000571, -0.001913, 0.01034],
 'rates_adjusted_1': [0.000429, -0.001913, 0.01034],
 'rates_adjusted_2': [-0.000571, -0.000913, 0.01034],
 'rates_adjusted_3': [-0.000571, -0.001913, 0.01134],
 'final_rates': [0.000429, -0.000913, 0.01134]}

Очевидно, вы можете изменить вывод в соответствии со своими требованиями.

...