我试图填写下面的列表列表:
Qlist = [[] for i in range(len(bestgr))]
for par in bestgr:
for day in range(71,72):
for n in range(len(bestgr)):
option_data, index_prices, initial_date = getsamedatedopt(fullData, day, 1)
gr = groupbyttm(option_data)
normk, norm_opt, tau, kind, k = intdata(gr, index_prices)
I = intrect(gr, norm_opt, normk, index_prices, kind, par, tau, k)
q = int2D(I, gr, tau)
Qlist[n].append(q)
在此代码中," bestgr"是表示为字典的参数集列表。我想要做的是使用上面的代码为每个参数集和每天计算q。代码应填充Qlist中的列表,其中的值等于所考虑的天数。换句话说,我需要将Qlist中的每个列表与一个参数集相关联,并包含为所考虑的特定集合计算的所有q。在上面的例子中,我有2个元素和一天的bestpar,所以我应该获得一个由两个元素组成的列表的列表(第一个包含在所选日期中第一个集合计算的q和第二个元素包含在所选日期中为第二组计算的q)。不幸的是,我得到的是[[2.6501, 2.6556], [2.6501, 2.6556]]
,而不是[[2.6501], [2.6556]]
。我怎样才能获得这样的输出?
修改
上面代码中使用的函数涉及计算给定相同日期选项的货币和成熟度的双重积分。 " Bestgr"包含用于为我的选项定价的模型的参数集,而day是作为参数传递给getsamedatedopt
函数的数字。该函数提取相应日期的选项数据(并因此提取计算积分的最终值q所需的所有元素)。我想填充循环遍历参数集和数据集天数的列表清单。
我应该期望Qlist中的列表包含在给定参数集的数据集中考虑的每一天的双重积分值q。因此,每个嵌套列表引用单个参数集,并包含多个值,这些值等于所考虑的数据集的天数。我上面的代码得到的是重复的值,因为如果我有2个参数集和一天的数据集,我希望Qlist中有两个嵌套列表,每个列表包含1个单值。 更具体地说,我应该获得:
Qlist = [[day1set1] [day1set2]]
不是Qlist = [[day1set1,day1set2] [day1set1,day1set2]]
答案 0 :(得分:0)
此语句Qlist[n].append(q)
将值添加到第n个子列表。让我们看看它的执行频率
par day n ->
0 71 0 Qlist[0].append(q)
0 71 1 Qlist[1].append(q)
1 71 0 Qlist[0].append(q)
1 71 1 Qlist[1].append(q)
我认为这个表很明显,为什么每个子列表最终得到2个值。
这是一个不太复杂的代码版本,希望能够满足您的需求:
qslist = []
for par in bestgr:
qlist = []
for day in range(71,72):
option_data, index_prices, initial_date = getsamedatedopt(fullData, day, 1)
# blah blah blah domain-specific stuff
q = int2D(I, gr, tau)
qlist.append(q)
qslist.append(qlist)
永远记住:创建复杂,难以理解的代码很容易。我们应该努力的是相反的:工作代码尽可能简单易读。