【问题标题】:Alternate way to do Iterative name/variables in Pythonic while loop在 Python while 循环中迭代地命名/变量的替代方法
【发布时间】: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.arraylistlists 等?

标签: python variables loops iteration


【解决方案1】:

对于第一个例子,

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

您可以使用list comprehension 生成 a(x) = 0, for x in [0, y]

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

或调用函数或其他数学运算

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

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

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

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 2019-02-15
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2021-12-08
    • 2021-11-03
    • 2015-04-21
    • 2017-12-14
    相关资源
    最近更新 更多