[英]Looping over lists Python, indexing (basic bootstrap)
給出以下兩個列表:
dates = [1,2,3,4,5]
rates = [0.0154, 0.0169, 0.0179, 0.0187, 0.0194]
我想生成一個列表df = []
練習中使用與“純” Python(無Numpy)中的日期和比率(0到4 = 5個元素)相同的長度。
df [i]等於:
df[0] = (1 / (1 + rates[0])
df[1] = (1 - df[0] * rates[1]) / (1 + rates[1])
...
df[4] = (1 - (df[0] + df[1]..+df[3])*rates[4]) / (1 + rates[4])
我正在嘗試:
df = []
df.append(1 + rates[0]) #create df[0]
for date in enumerate(dates, start = 1):
running_sum_vec = 0
for i in enumerate(rates, start = 1):
running_sum_vec += df[i] * rates[i]
df[i] = (1 - running_sum_vec) / (1+ rates[i])
return df
但是正在獲取TypeError:列表索引必須是整數。 謝謝。
因此,枚舉方法返回兩個值:索引和值
>>> x = ['a', 'b', 'a']
>>> for y_count, y in enumerate(x):
... print('index: {}, value: {}'.format(y_count, y))
...
index: 0, value: a
index: 1, value: b
index: 2, value: a
這是因為for i in enumerate(rates, start = 1):
enumerate
生成索引和列表中對象的元組。 你應該做類似的事情
for i, rate in enumerate(rates, start=1):
running_sum_vec += df[i] * rate
您還需要修復另一個循環( for date in enumerate...
)。
您還需要將df[i] = (1 - running_sum_vec) / (1+ rates[i])
返回到循環中(當前它只會設置最后一個值)(並更改為追加值,因為當前它將嘗試設置為超出范圍的索引)。
枚舉返回索引和條目。 因此,假設列表包含整數,則您的代碼可以是:
df = []
df.append(1 + rates[0]) #create df[0]
for date in dates:
running_sum_vec = 0
for i, rate in enumerate(rates[1:], start = 1):
running_sum_vec += df[i] * rate
df[i] = (1 - running_sum_vec) / (1+ rate)
return df
盡管我幾乎是肯定的,但是列表理解還是有辦法的。 我必須考慮一下。
不確定這是否是您想要的:
df = []
sum = 0
for ind, val in enumerate(dates):
df.append( (1 - (sum * rates[ind])) / (1 + rates[ind]) )
sum += df[ind]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.