【问题标题】:Append output function to multiple lists将输出函数附加到多个列表
【发布时间】:2017-02-21 11:32:09
【问题描述】:

我想执行一个具有不同参数值的函数。我有以下运行良好的代码 sn-p:

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] 返回<generator object <genexpr> at 0x046E7698>

【问题讨论】:

    标签: python list python-2.7 append


    【解决方案1】:
    tau = np.arange(2,4.01,0.1)
    results = [[] for _ in range(7)]
    for i, tenum in enumerate(tau):
        data = foo.cvxEDA(edaN, 1./fs, tenum, 0.7, 10.0, 0.0008, 0.01)
        for r,d in zip(results, data):
            r.append(d)
    r, p, t, l, d, e, _obj = results
    

    【讨论】:

    • 在第二个 for 循环中,您使用 r 作为索引和 d 作为占位符,但 rd 也是目标变量。这是故意的吗?该循环实际上发生了什么?
    • @RobinKramer 只是一个变量名,您可以使用任何其他名称,抱歉这里有名称冲突。
    【解决方案2】:

    您可以将生成器对象转换为列表对象,只需将其传递给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
    

    编辑:最简单的是,您可以避免使用直接传递给zip() 的生成器表达式来构建中间列表:

    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))
    

    最后一点:在所有这些中,您可以将“for i, tenum in enumerate(tau)”替换为“for tenum in tau”,因为您似乎没有使用i

    【讨论】:

    • 非常感谢。很明确的答案! i 是一些早期尝试遍历 numpy 数组的剩余部分。也感谢您指出这一点。
    • 顺便说一句。你的最后一个建议没有奏效。它返回了一个TypeError: unsupported operand type(s) for /: 'float' and 'tuple',这是由 cvxEDA 函数抛出的。
    • 您确定删除了enumerate 以及“i, ”吗?因为如果不是,每个tenum 都将设置为(0, first_tenum)(1, second_tenum)
    • 忘记枚举了。谢谢;)
    猜你喜欢
    • 2017-09-15
    • 2020-07-23
    • 2020-10-03
    • 2019-04-09
    • 1970-01-01
    • 2020-07-21
    • 2021-12-25
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多