提问人:sfortney 提问时间:2/23/2014 最后编辑:sfortney 更新时间:7/25/2016 访问量:384
在 Pythonic while 循环中执行迭代名称/变量的替代方法
Alternate way to do Iterative name/variables in Pythonic while loop
问:
所以我知道在迭代变量名称时修改变量名称是一种 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):)
谢谢。
答:
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)]
第二个示例令人困惑,在定义之前被引用,并且像函数一样被调用,而不是像 或 .ax
a
list
sp.array
也许从 rosetta 代码中查看 python 中的简化行梯队形式。
评论
ax
a[x]
a
rowred()
scipy.array
numpy.array
list
list