Python 如何迭代不等嵌套列表以创建新列表

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],

为了使用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],
           [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个月前才开始学。当我创建字典时,我无法获取计算出的通话价格的嵌套循环。其他时候,数据字典很混乱。是的,我没有接受错误的答案。而且,我在字典方面也没有那么先进。