簡體   English   中英

在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):)和(想象的)獎勵積分:)

謝謝。

對於第一個例子,

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

您可以使用列表推導生成(x)= 0,對於[0,y]中的x

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

或者調用函數或其他數學

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

第二個例子令人困惑, ax在定義之前被引用,而a被稱為函數而不是像listsp.array那樣被索引。

也許從rosetta代碼看python中減少的行梯形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM