![](/img/trans.png)
[英]How to iterate nested lists with another list to create a dictionary of lists Python
[英]How to iterate unequal nested lists to create a new list Python
我一直在迭代幾個嵌套列表,以便使用Python模塊Mibian計算Call選項。
如果我使用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
-loop。 我得到了股票的所有看漲期權。
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]
, my_list[1]
和my_list[2]
的調用選項價格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]
有人可以幫忙嗎? 我確信這很簡單,我很想念。 非常感謝。 PS我在這里編輯代碼時無法正確縮進。
讓我們從您當前的方法開始:
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)
這也解決了“動態索引”的問題,因為您可以遍歷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)
然后你可以使用list comprehension來替換內部循環:
data = dict()
for x, sublist in enumerate(my_list):
data[x] = [mb.BS([120, i, 1, 20 ], 10).callPrice for i in sublist]
如果你覺得你想要這個更短(不推薦但有些喜歡它),那么使用dict理解而不是外部循環:
data = {x: [mb.BS([120, i, 1, 20 ], 10).callPrice for i in sublist]
for x, sublist in enumerate(my_list)}
提供的
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]
應該回報你的期望?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.