循环执行列表的Python,索引(基本引导)

循环执行列表的Python,索引(基本引导)

问题描述:

鉴于以下两个列表:循环执行列表的Python,索引(基本引导)

dates = [1,2,3,4,5] 
rates = [0.0154, 0.0169, 0.0179, 0.0187, 0.0194] 

我想生成一个列表 DF = []

长度相同的日期和价格的

( 0到4 = 5个元素)作为练习在'纯粹'Python(没有Numpy)。

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 

,但我得到的类型错误:列表索引必须是整数

DF [I]将等于。谢谢。

+0

你的指数是薄纱,因为这就是枚举产量。即使你没有使用'x'变量,你也需要'为idx,x在enumerate..'中 – Vinny

+0

你正在迭代你的'running_sum_vec + = df [i] * rates [i]'df'填充。结果值应该是多少? – bhansa

因此,枚举方法返回两个值:食指和值

>>> 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])移回到循环中(目前它只会设置最后一个值)(并将其更改为append,因为它目前会试图设置索引超出范围)。

枚举返回索引和条目。 所以假设列表包含整数,你的代码可以是:

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 

虽然我几乎可以肯定有一个与列表理解的方式。我必须考虑一下。

+1

它会显示列表索引超出范围错误。 – bhansa

+0

好点,错过了 –

不知道这是否是你想要什么:

df = [] 
sum = 0 

for ind, val in enumerate(dates): 
    df.append((1 - (sum * rates[ind]))/(1 + rates[ind])) 
    sum += df[ind]