Python 如何迭代不等嵌套列表以创建新列表
为了使用Python模块Mibian计算看涨期权,我一直在迭代几个嵌套列表 如果我用mibian来计算欧洲买入期权Python 如何迭代不等嵌套列表以创建新列表,python,list,loops,for-loop,nested-lists,Python,List,Loops,For Loop,Nested Lists,为了使用Python模块Mibian计算看涨期权,我一直在迭代几个嵌套列表 如果我用mibian来计算欧洲买入期权 import mibian as mb mb.BS([stock price, strike price, interest rate, days to maturity], volatility) my_list = [[20, 25, 30, 35, 40, 45], [50, 52, 54, 56, 58, 60, 77, 98, 101],
import mibian as mb
mb.BS([stock price, strike price, interest rate, days to maturity], volatility)
my_list = [[20, 25, 30, 35, 40, 45],
[50, 52, 54, 56, 58, 60, 77, 98, 101],
[30, 40, 50, 60]]
为了计算多个看涨期权,首先,我创建了一个范围。
如果我选择第一个嵌套列表,my_list[0]
,并运行for
-循环。我得到了股票的所有看涨期权
range_list = list(range(len(my_list)))
range_list
# [0, 1, 2]
data = dict()
for x in range_list:
data[x] = option2 = []
for i in my_list[0]:
c = mb.BS([120, i, 1, 20 ], 10)
option2.append(c.callPrice)
option2
这给出了my_列表中第一个嵌套列表的6个买入价格
输出:
[100.01095590221843,
95.013694877773034,
90.016433853327641,
85.019172828882233,
80.021911804436854,
75.024650779991447]
[[100.01095590221843, [70.027389755546068, [90.016433853327641,
95.013694877773034, 68.028485345767905, 80.021911804436854,
90.016433853327641, 66.029580935989742, 80.021911804436854,
85.019172828882233, 64.030676526211579, 70.027389755546068,
80.021911804436854, 62.03177211643343, ]]
75.024650779991447] 60.032867706655267,
43.042180223540925,
22.05368392087027,
19.055327306203068]
我想弄明白的是,如何一次迭代所有嵌套列表,并获得一个新的嵌套列表列表,其中包含我的列表[0]
、我的列表[1]
和我的列表[2]
的看涨期权价格
我希望这三个嵌套列表都能一次性输出
输出:
[100.01095590221843,
95.013694877773034,
90.016433853327641,
85.019172828882233,
80.021911804436854,
75.024650779991447]
[[100.01095590221843, [70.027389755546068, [90.016433853327641,
95.013694877773034, 68.028485345767905, 80.021911804436854,
90.016433853327641, 66.029580935989742, 80.021911804436854,
85.019172828882233, 64.030676526211579, 70.027389755546068,
80.021911804436854, 62.03177211643343, ]]
75.024650779991447] 60.032867706655267,
43.042180223540925,
22.05368392087027,
19.055327306203068]
有人能帮忙吗?我肯定我错过了一些非常简单的东西。
非常感谢。
另外,在这里编辑代码时,我无法获得正确的缩进 如果
my_nested_list = [[1,2,3], [4,5,6,7], [8,9]]
[i for i in my_nested_list]
返回
[[1, 2, 3], [4, 5, 6, 7], [8, 9]]
沿途
my_list = [[20, 25, 30, 35, 40, 45], [50, 52, 54, 56, 58, 60, 77, 98, 101],
[30, 40, 50, 60]]
[mb.BS([120, i, 1, 20 ], 10) for i in my_list]
将返回您期望的结果吗?让我们从您当前的方法开始:
range_list = list(range(len(my_list)))
data = dict()
for x in range_list:
data[x] = option2 = []
for i in my_list[0]:
c = mb.BS([120, i, 1, 20 ], 10)
option2.append(c.callPrice)
首先要注意的是,有enumerate
可以同时获取索引和零件,因此可以省略range\u list
变量:
data = dict()
for x, sublist in enumerate(my_list):
data[x] = option2 = []
for i in my_list[0]:
c = mb.BS([120, i, 1, 20 ], 10)
option2.append(c.callPrice)
这也解决了“动态索引”的问题,因为您只需迭代子列表
:
data = dict()
for x, sublist in enumerate(my_list):
data[x] = option2 = []
for i in sublist:
c = mb.BS([120, i, 1, 20 ], 10)
option2.append(c.callPrice)
然后可以使用列表理解替换内部循环:
data = dict()
for x, sublist in enumerate(my_list):
data[x] = [mb.BS([120, i, 1, 20 ], 10).callPrice for i in sublist]
如果你想让这个短一点(不推荐,但有些人喜欢),那么就用听写理解代替外循环:
data = {x: [mb.BS([120, i, 1, 20 ], 10).callPrice for i in sublist]
for x, sublist in enumerate(my_list)}
请编辑您的问题,谢谢链接,班萨。我已经编辑了它,但是如果我编辑太多,它会丢失很多关于这个问题的信息。遗憾的是,我在这个问题上的投票结果还是让人失望。这有点让人困惑。IIUC,去掉
range\u list=list(range(len(my\u list)))
,用于range\u list中的x:
,数据[x]=option2=[]
和用于my\u list中的i[0]:
。用嵌套缩进替换我列表中的i:c=mb.BS([120,j,1,20],10)。这就是你的目标吗?我所做的一切是否正确?为什么my_list[2]
包含4个元素,但预期回报有5个?嗨,MSeifert,谢谢你指出这一点。这只是我在编辑方面的一个错误。您指的是我的_列表[2]中的最后一行,60.03286…,它实际上只是我复制和粘贴时我的_列表[1]的一个副本。我会编辑出来的,谢谢。据我所知,你需要嵌套迭代。一个是访问子列表,然后访问子列表中的单个值。另外,还有一个callPrice
方法。很好的重新工作!比我快。但是我是不是遗漏了什么,关于callPrice
method呢?@Parfait你是对的,我遗漏了。我编辑了代码,现在应该是正确的。哦,哇!谢谢你,小姐!感谢所有帮助过我的人!:)我已经为此挣扎了几天,很累。因此,我提出了一个最初很混乱的问题。所以你在字典里创建了一个列表,很酷!希望这能在迭代嵌套循环和/或计算选项方面对其他人有所帮助。@MichaelRSF我很好奇为什么你接受了另一个似乎根本不能解决你问题的答案。您的初始代码还尝试创建字典。嗨,罗根,我还是Python的新手。我大约1-2个月前才开始学。当我创建字典时,我无法获取计算出的通话价格的嵌套循环。其他时候,数据字典很混乱。是的,我没有接受错误的答案。而且,我在字典方面也没有那么先进。