我定义了一个函数createDictionary
,它接受一个文件,从该文件中提取密钥并使用这些密钥从矩阵中索引数据值。然后返回,并将索引用作键,并将值作为python词典中的值检索。
我的目标是编写一个getData
函数,根据用户传递给它的矩阵和其他args的数量,调用并运行createDictionary
一定次数。我想要做的更多手动版本如下。
def getData(bedfile, matrix1, start1, end1, matrix2, start2, end2, matrix3, start3, end3, bedfilesep = "\t", matrixsep = "\t"):
x = createDictionary(bedfile, matrix1, start1, end1, bedfilesep, matrixsep)
y = createDictionary(bedfile, matrix2, start2, end2, bedfilesep, matrixsep)
z = createDictionary(bedfile, matrix3, start3, end3, bedfilesep, matrixsep)
x.update(y)
x.update(z)
return x.values()
理想情况下,我可以传递任意数量的matrix#
,start#
和end#
参数,并针对此类事件的出现次数运行此函数。
答案 0 :(得分:1)
实际上你想要使用不同的数据结构。 每当你发现自己定义x1,x2,x3 ...... x913等时,请考虑使用列表!
函数看起来像这样:
def getData(bedfile, matrixlist, bedfilesep = "\t", matrixsep = "\t"):
x = createDictionary(bedfile, matrixlist[0][0], matrixlist[0][1], matrixlist[0][2], bedfilesep, matrixsep)
y = createDictionary(bedfile, matrixlist[1][0], matrixlist[1][1], matrixlist[1][2], bedfilesep, matrixsep)
z = createDictionary(bedfile, matrixlist[2][0], matrixlist[2][1], matrixlist[2][2], bedfilesep, matrixsep)
...
你需要将你的矩阵打包到列表中,例如将它们存储在元组中:
mylist = []
mylist.append((m1, s1, e1))
mylist.append((m12, 12, 33))
然后你可以通过调用
立即传递整个列表getData(bedfile, mylist)
答案 1 :(得分:0)
考虑将它们作为矩阵,开始和结束的三个单独列表或三者中的三元组三元组列表传递。然后使用for循环或列表推导来为它们的每一组运行。 对于无序的异构参数列表使用* args ** kwargs似乎并不理想。
答案 2 :(得分:0)
它应该像将参数作为list
传递一样简单,所以
getData(bedfile, matrix1, ... , matrix2, ...)
会变成
getData(bedfile, [matrix1, matrix2], ....)
然后在getData
函数中,您可以将其作为
x = {}
for matrix, start, end in zip(matrices, starts, ends):
x.update(createDictionary(bedfile, matrix, start, end, bedfilesep, matrixsep)