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

时间:2014-02-22 19:45:28

标签: python variables loops iteration

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

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

这会给你y个变量,a1,a2,a3 .... ay都等于0。

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

特别是在下面的例子中(这是执行简单行 - 梯级缩减的代码的开头),我想用ax创建迭代变量(参见倒数第二行),其中x等于在第一次迭代时为0(so 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):)

感谢。

1 个答案:

答案 0 :(得分:0)

对于第一个例子,

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

您可以使用list comprehension为[0,y]中的x生成(x)= 0

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

或调用函数或其他数学

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

第二个示例令人困惑,ax在定义之前被引用,而a被称为函数,而不是像listsp.array那样被编入索引。

也许从rosetta code看python中减少的行梯形表。