在 Pythonic while 循环中执行迭代名称/变量的替代方法

Alternate way to do Iterative name/variables in Pythonic while loop

提问人:sfortney 提问时间:2/23/2014 最后编辑:sfortney 更新时间:7/25/2016 访问量:384

问:

所以我知道在迭代变量名称时修改变量名称是一种 pythonic 异端邪说,但我一直在寻找一种好的 pythonic 方法来做到这一点并且可以弄清楚。在统计编程(Stata、SAS)中,这样的代码很常见:

for x in 1/y:
gen a`x'=0

这将为您提供 y 个变量,a1,a2,a3...。ay 都等于 0。

我看到其他帖子说,要做这样的事情,你可以创建一个库并调用所有这些值,但是如果你有无限(有限)数量的值怎么办?

特别是在下面的示例中(这是执行简单行级约简的代码的开头),我想使用 ax 创建迭代变量(请参阅倒数第二行),其中 x 在第一次迭代中等于 0(所以 a0),在第二次迭代中等于 1(或 a1),依此类推,一直到 ax。

我看不出有办法用字典来做到这一点,因为我必须首先指定其中的条目数。也许我在这里的理解是有缺陷的,但这就是我的想法。

def cmultadd(n, j, k, const):
    out = eye(n)
    out[j,k] = const
    return out  

def rowred(a):
    numrows = len(a)-1
    x=0
    while x<=numrows:
        ax=sp.dot(cmultadd(3,x,0,-ax[x+1,0]/ax[0,0]), a(x-1)); ax
        x=x+1

有人可以解释一种 pythonic 方法来执行我尝试在此处倒数第二行中的 ax 变量执行的操作吗?并且(假想的)奖励积分,如果您能以有意义的方式解释它,给定第一个示例(来自 stata):)

谢谢。

Python 变量 循环 迭代

评论

5赞 rlms 2/23/2014
使用列表。 -> .axa[x]
2赞 chippies 2/23/2014
字典不要求您预先指定其大小。不过,我不会使用字典,因为与列表的建议相比,搜索字符串键@sweeneyrod开销。
0赞 tmthydvnprt 5/5/2015
中的参数类型是什么?您能提供一个示例输入吗?我假设它是一个矩阵,但是 s 等的类型、/、是什么类型?arowred()scipy.arraynumpy.arraylistlist

答:

0赞 tmthydvnprt 5/3/2015 #1

对于第一个示例,

for x in 1/y:
gen a`x'=0

您可以使用列表推导式来生成 a(x) = 0,对于 [0, y] 中的 x

a = [0 for x in range(y)]

或调用函数或其他数学

a = [math.pow(x, 2) for x in range(y)]

第二个示例令人困惑,在定义之前被引用,并且像函数一样被调用,而不是像 或 .axalistsp.array

也许从 rosetta 代码中查看 python 中的简化行梯队形式。