循环执行列表的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]将等于。谢谢。
因此,枚举方法返回两个值:食指和值
>>> 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
虽然我几乎可以肯定有一个与列表理解的方式。我必须考虑一下。
它会显示列表索引超出范围错误。 – bhansa
好点,错过了 –
不知道这是否是你想要什么:
df = []
sum = 0
for ind, val in enumerate(dates):
df.append((1 - (sum * rates[ind]))/(1 + rates[ind]))
sum += df[ind]
你的指数是薄纱,因为这就是枚举产量。即使你没有使用'x'变量,你也需要'为idx,x在enumerate..'中 – Vinny
你正在迭代你的'running_sum_vec + = df [i] * rates [i]'df'填充。结果值应该是多少? – bhansa