【发布时间】:2014-03-24 10:48:48
【问题描述】:
所以我知道在迭代变量名的同时修改变量名是一种 pythonic 异端,但我一直在寻找一种好的 pythonic 方法来做到这一点并且可以弄清楚。在统计编程(Stata、SAS)中,这样的代码很常见:
for x in 1/y:
gen a`x'=0
这会给你 y 个变量,a1,a2,a3....都等于 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)的方式解释它:)
谢谢。
【问题讨论】:
-
使用列表。
ax->a[x]. -
字典不需要您预先指定它们的大小。我不会使用字典,因为与@sweeneyrod 建议的列表相比,搜索字符串键的开销更大。
-
rowred()中a参数的类型是什么?你能提供一个示例输入吗?我假设它是一个矩阵,但是什么类型,scipy.array/numpy.array、list或lists 等?
标签: python variables loops iteration