如何迭代不相等的嵌套列表以创建新列表 Python
How to iterate unequal nested lists to create a new list Python
我一直在迭代几个嵌套列表,以便使用 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]]
为了计算多个看涨期权,首先,我创建了一个范围。
如果我 select,说第一个嵌套列表,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_list 的第一个嵌套列表的 6 个看涨期权价格。
输出:
[100.01095590221843,
95.013694877773034,
90.016433853327641,
85.019172828882233,
80.021911804436854,
75.024650779991447]
我想弄清楚的是,如何一次性迭代所有嵌套列表,并获得包含 my_list[0]
、[= 的看涨期权价格的新嵌套列表列表18=], 和 my_list[2]
.
对于所有三个嵌套列表,我希望一次性输出此输出。
输出:
[[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]
有人可以帮忙吗?我确定这是我所缺少的非常简单的东西。
非常感谢。
P.S。在此处编辑我的代码时无法正确缩进。
前提是
my_nested_list = [[1,2,3], [4,5,6,7], [8,9]]
[i for i in my_nested_list]
returns
[[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]
return你期待什么?
让我们从您当前的方法开始:
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
变量:
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)
这也解决了 "dynamic indexing" 的问题,因为您可以迭代 sublist
:
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)}
我一直在迭代几个嵌套列表,以便使用 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]]
为了计算多个看涨期权,首先,我创建了一个范围。
如果我 select,说第一个嵌套列表,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_list 的第一个嵌套列表的 6 个看涨期权价格。
输出:
[100.01095590221843,
95.013694877773034,
90.016433853327641,
85.019172828882233,
80.021911804436854,
75.024650779991447]
我想弄清楚的是,如何一次性迭代所有嵌套列表,并获得包含 my_list[0]
、[= 的看涨期权价格的新嵌套列表列表18=], 和 my_list[2]
.
对于所有三个嵌套列表,我希望一次性输出此输出。
输出:
[[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]
有人可以帮忙吗?我确定这是我所缺少的非常简单的东西。 非常感谢。 P.S。在此处编辑我的代码时无法正确缩进。
前提是
my_nested_list = [[1,2,3], [4,5,6,7], [8,9]]
[i for i in my_nested_list]
returns
[[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]
return你期待什么?
让我们从您当前的方法开始:
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
变量:
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)
这也解决了 "dynamic indexing" 的问题,因为您可以迭代 sublist
:
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)}