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)
等的枚举。谢谢;)