Python 将输出函数附加到多个列表
我想用不同的参数值执行一个函数。我有下面的代码片段,它工作得非常好:Python 将输出函数附加到多个列表,python,list,python-2.7,append,Python,List,Python 2.7,Append,我想用不同的参数值执行一个函数。我有下面的代码片段,它工作得非常好: tau = np.arange(2,4.01,0.1) R = [] P = [] T = [] L = [] D = [] E = [] Obj = [] for i, tenum in enumerate(tau): [r, p, t, l, d, e, obj] = (foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) R.append(r)
tau = np.arange(2,4.01,0.1)
R = []
P = []
T = []
L = []
D = []
E = []
Obj = []
for i, tenum in enumerate(tau):
[r, p, t, l, d, e, obj] = (foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01))
R.append(r)
P.append(p)
T.append(t)
L.append(l)
D.append(d)
E.append(e)
Obj.append(obj)
然而,我想知道:有没有更简单的方法来实现这一点?
我试过使用
res.append(foo.cvxEDA(edaN,1./fs,tenum,0.7,10.0,0.0008,0.01)
但是res[1]
返回
您可以通过将生成器对象传递给list()
函数将其转换为列表对象,因此这可能会满足您的要求:
res = []
for i, tenum in enumerate(tau):
res.append(list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)))
更简短的列表理解:
res = [list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) for i, tenum in enumerate(tau)]
无论哪种方式,这都会使res与您想要的内容相比较(将其视为一个矩阵)。您可以通过调用zip
:
res_tr = zip(*res)
R, P, T, L, D, E, Obj = res_tr
R, P, T, L, D, E, Obj = zip(*(list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) for tenum in tau))
编辑:最短的,您可以避免使用直接传递到zip()
的生成器表达式构建中间列表:
最后一点注意:在所有这些中,您可以将“
for i,tenum In enumerate(tau)
”替换为“for tenum In tau
”,因为您似乎没有使用i
”,您可以通过将生成器对象传递给list()
函数,将其转换为列表对象,因此这可能会实现您想要的功能:
res = []
for i, tenum in enumerate(tau):
res.append(list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)))
更简短的列表理解:
res = [list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) for i, tenum in enumerate(tau)]
无论哪种方式,这都会使res与您想要的内容相比较(将其视为一个矩阵)。您可以通过调用zip
:
res_tr = zip(*res)
R, P, T, L, D, E, Obj = res_tr
R, P, T, L, D, E, Obj = zip(*(list(foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)) for tenum in tau))
编辑:最短的,您可以避免使用直接传递到zip()
的生成器表达式构建中间列表:
最后一点注意:在所有这些中,您可以将“
表示i,tenum In enumerate(tau)
”替换为“表示tenum In tau
”因为在第二个for循环中,您似乎没有使用i
,所以您使用r
作为索引,d
作为占位符,但是r
和d
也是目标变量。这是故意的吗?在该循环中实际上发生了什么事?@RobinKramer只是一个变量名,您可以使用任何其他名称,对不起这里发生冲突。在第二个for循环中,您使用r
作为索引,d
作为占位符,但是r
和d
也是目标变量。这是故意的吗?在该循环中实际发生了什么?@RobinKramer只是一个变量名,您可以使用任何其他名称,很抱歉在这里发生名称冲突。非常感谢。a答案非常清楚。i
是先前尝试迭代numpy数组的剩余部分。感谢您指出这一点。顺便说一句。您上次的建议无效。它返回了TypeError:不支持的操作数类型对于/:“float”和“tuple”
,这是由cvxEDA函数抛出的。您确定删除了enumerate
,以及删除了“i,
”?因为如果没有,每个tenum
都将设置为类似于(0,first_tenum)
,(1,second_tenum)
等的值。谢谢;)非常感谢你。答案很清楚!i
是早期尝试迭代numpy数组的剩余部分。谢谢你指出这一点。顺便说一句。你上次的建议不起作用。它返回了一个由cvxEDA函数引发的TypeError:不支持的/:“float”和“tuple”的操作数类型。是否确实删除了enumerate
,以及删除了“i,
”?因为如果不是,每个tenum
将被设置为类似于(0,第一个tenum)
,(1,第二个tenum)
等的枚举。谢谢;)