2013-03-01 79 views
3

我有一組名爲k1,k2 k3 .... k52的變量。他們的變量是列表/ numpy數組,取決於場景。本質上我想在一個循環內對它們進行相同的操作,但是在處理它們時遇到麻煩。基本上我喜歡這樣的事情:python中的變量名迭代?

for i in arange(0,52): 
    'k'+ str(i) = log10(eval('k' + str(i))) 

很明顯,我知道上述不會工作,但它提供了這個想法。我實際的嘗試是這樣的:

for i in arange(0,10): 

    rate = eval('k' + str(i)) 
    rate = np.array(rate,dtype=float) 
    rate = log10(rate) 
    rate.tolist() 
    vars()[rate] = 'k' + str(i) 

(其改爲numpy的陣列,這樣我就可以登錄了,然後回一個列表,所以我改變變量名回到這是什麼),感謝您的幫助,您可以提供。我覺得這很簡單,但現在卻逃脫了我。

編輯:非常感謝您的回答,我應該解釋說,我不能真正地將它們存儲爲一個集合數組,他們需要保持爲獨立變量,原因是我不想進入。

+4

爲什麼不把它們存儲在首位列表或字典? – 2013-03-01 15:54:30

+0

我想知道有多少編程問題可以通過添加或刪除一層間接尋址來解決。 – 2013-03-01 15:57:33

+0

這是人們學習Python數據結構的常見問題。這種方法就像在你所有的書上寫着「Nathan的書#1」,「Nathan的書#2」等等,把它們散佈在整個房子上,然後試圖優化一種方式來通過它們。如果你關心的是他們都在一個地方,把它們放在一個袋子裏(一套「套裝」)。如果你也關心這個命令,把它們放在一堆(一個「列表」)中,然後按照你的喜好排序或不排序。如果你關心能夠從名字中輕鬆訪問一個人,把它們放在書架上(一個'dict')。沒有標籤製作者需要! – DSM 2013-03-01 16:04:27

回答

0

行:

vars()[rate] = 'k' + str(i) 

不得不被替換爲:

vars()['k' + str(i)]=rate 
+0

非常感謝,解決了我的問題! – 2013-03-02 12:44:49

+1

如果它在一個函數中,這將不起作用,所以這不是一個好主意。該文檔明確表示不要修改'vars'(這只是'locals()'字典)的結果。)' – DSM 2013-03-02 21:44:24

3

如果項目全部全局你可以使用globals()調用來獲取映射,然後操縱他們:

g = globals() 

for i in arange(0,52): 
    varname = 'k{}'.format(i) 
    g[varname] = log10(g[varname]) 

但你真的想只是存儲在一個列表或字典,而不是所有的項目。

+0

通常情況下,我只是對這些問題使用'dict',但由於它們是按順序編號的,所以我可以在這裏列出一個列表...'k [1]','k [2]'...而不是'k1','k2' ...當然,如果您將索引從0而不是1. +1提取列表並使我檢查我的直覺反應,那麼列表會更有意義。 – mgilson 2013-03-01 15:58:53