【发布时间】:2017-04-11 00:18:10
【问题描述】:
我正在使用 Mibian 模块来计算看涨期权。我有一个包含三个嵌套列表的列表。每个嵌套列表代表执行价格。每个嵌套列表都有各自的到期天数,即 my_list[2] 还剩 30 天。
import mibian as mb
import pandas as pd
my_list = [[20, 25, 30, 35, 40, 45],
[50, 52, 54, 56, 58, 60, 77, 98, 101],
[30, 40, 50, 60]]
days_left = [5, 12, 30]
my_list[2]
[30, 40, 50, 60]
days_left[2]
30
用于计算看涨期权的 Mibian Black-Scholes 代码的结构。
mb.BS([stock price, strike price, interest rate, days to maturity], volatility)
data1 = dict()
for x, sublist in enumerate(my_list):
data1[x] = option3 = []
for i in sublist:
c = mb.BS([120, i, 1, 20], 10)
option3.append(c.callPrice)
给出一个包含 3 个列表的字典的输出,调用价格基于来自 my_list 的三个嵌套列表中的每一个。
data1
{0: [100.01095590221843,
95.013694877773034,
90.016433853327641,
85.019172828882233,
80.021911804436854,
75.024650779991447],
1: [70.027389755546068,
68.028485345767905,
66.029580935989742,
64.030676526211579,
62.03177211643343,
60.032867706655267,
43.042180223540925,
22.05368392087027,
19.055327306203068],
2: [90.016433853327641,
80.021911804436854,
70.027389755546068,
60.032867706655267]}
我想要得到的是嵌套列表和要一起迭代的日期
我想创建与上面相同的字典,但它不仅会迭代 my_list,还会按顺序迭代 days_left。
我尝试了 new_list = list(zip(days_left, my_list)) 的 zip 列表,但它给了我一个错误。有人可以帮忙吗?非常感谢。
new_list = list(zip(my_list, days_left))
[([20, 25, 30, 35, 40, 45], 5),
([50, 52, 54, 56, 58, 60, 77, 98, 101], 12),
([30, 40, 50, 60], 30)]
data5 = dict()
for x, days_left, my_list in enumerate(new_list):
data5[x] = option5 = []
for days_left, my_list in new_list:
c = mb.BS([120, my_list, 1, days_left ], 10)
option5.append(c.callPrice)
对于像 my_list[2] 这样的单个嵌套列表。输出是:
range_list = list(range(1))
data2 = dict()
for x in range_list:
data2[x] = option2 = []
for i in my_list[2]:
c = mb.BS([120, i, 1, 30 ], 10)
option2.append(c.callPrice)
option2
[90.024647403788975,
80.032863205051967,
70.041079006314973,
60.049294807577965]
这些值与 data1[2] 中的值相似,但不同。理想的输出应该与 data1 具有相同的结构,具有三个字典,但由于 days_left,值略有不同。这些差异可能看起来微不足道,但稍后,我必须将它们乘以 100,这样这些差异就会增加。
【问题讨论】:
-
输出应该是什么样子的?
-
嗨 Austin,它应该看起来像上面 data1 中的字典,并且值应该看起来相似,但考虑了 days_left。例如,
range_list = list(range(1)) data2 = dict() for x in range_list: data2[x] = option2 = [] for i in my_list[2]: c = mb.BS([120, i, 1, 30 ], 10) option2.append(c.callPrice) option2的输出值将类似于 data1[2]、[90.024647403788975, 80.032863205051967, 70.041079006314973, 60.049294807577965]
标签: python list loops dictionary nested-lists