首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代不平等的嵌套列表以创建新的列表Python

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

Stack Overflow用户
提问于 2017-04-10 18:04:00
回答 2查看 931关注 0票数 1

为了通过使用Python模块Mibian计算调用选项,我不得不迭代几个嵌套列表。

如果我用mibian计算组成的欧洲看涨期权。

代码语言:javascript
复制
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-loop。我有股票的所有看涨期权。

代码语言:javascript
复制
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_list的第一个嵌套列表的6个调用价格。

输出:

代码语言:javascript
复制
 [100.01095590221843,
  95.013694877773034,
  90.016433853327641,
  85.019172828882233,
  80.021911804436854,
  75.024650779991447]

我想弄清楚的是,如何一次迭代所有嵌套列表,并获得一个新的嵌套列表列表,其中包含my_list[0]my_list[1]my_list[2]的看涨选项价格。

对于所有三个嵌套列表,我都希望输出一次。

输出:

代码语言:javascript
复制
 [[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]

有人能帮忙吗?我肯定这是我错过的很简单的事情。非常感谢。在这里编辑我的代码时,我无法正确地理解缩进。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-10 18:43:06

让我们从您当前的方法开始:

代码语言:javascript
复制
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_list变量:

代码语言:javascript
复制
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)

这也解决了“动态索引”的问题,因为您可以在sublist上进行迭代。

代码语言:javascript
复制
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)

然后,您可以使用列表理解替换内环:

代码语言:javascript
复制
data = dict()
for x, sublist in enumerate(my_list):
    data[x] = [mb.BS([120, i, 1, 20 ], 10).callPrice for i in sublist]

如果你觉得自己想缩短时间(不是推荐的,但有些人喜欢),那么就用一个丁字理解来代替外部循环:

代码语言:javascript
复制
data = {x: [mb.BS([120, i, 1, 20 ], 10).callPrice for i in sublist] 
        for x, sublist in enumerate(my_list)}
票数 3
EN

Stack Overflow用户

发布于 2017-04-10 18:33:25

但条件是

代码语言:javascript
复制
my_nested_list = [[1,2,3], [4,5,6,7], [8,9]]
[i for i in my_nested_list]

返回

代码语言:javascript
复制
[[1, 2, 3], [4, 5, 6, 7], [8, 9]]

顺其自然

代码语言:javascript
复制
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]

还你想要的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43329974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档