2013-04-17 81 views
2

我想運行一個Python程序,它循環多次,每次都創建一個NEW數組 - 即沒有數據被覆蓋 - 用引用循環數命名的數組,這樣我可以在後續循環中調用它。例如,我可能想要在從0運行到i的循環中創建數組x0,x1,x2,...,xi,然後在運行相同變量的另一個循環中調用每個數組。 (基本上相當於能夠將變量放入字符串中,如'string %d %(x)')。如何在Python中循環中重命名變量

+14

沒有做到這一點...使用列表(或字典)的最佳方式,而不是 – jamylak

+3

你的問題是你正在使用本地變量,您應該使用列表或字典*而不是*。 –

回答

0

使用的字典:

arraysDict = {} 
for i in range(0,3): 
    arraysDict['x{0}'.format(i)] = [1,2,3] 

print arraysDict 
# {'x2': [1, 2, 3], 'x0': [1, 2, 3], 'x1': [1, 2, 3]} 
print arraysDict['x1'] 
# [1,2,3] 

使用列表:

arraysList = [] 
for i in range(0,3): 
    arraysList.append([1,2,3]) 

print arraysList 
# [[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
print arraysList[1] 
# [1, 2, 3] 
0

您可以爲此創建一個對象,然後使用setattr函數完成此操作。 基本上,它的工作是這樣的:

setattr(myobject, 'string', value) 

這是一樣的做:myobject.string = value

1

您可以訪問globals()字典來引入新的變量。像:

for i in range(0,5): 
    globals()['x'+str(i)] = i 

這個循環之後你會得到

>>> x0, x1, x2, x3, x4 
(0, 1, 2, 3, 4) 

。注意,根據documentation,你不應該使用locals()字典,因爲改變這個可能不影響所使用的值口譯員

+1

除了它不適用於本地人()' –

+0

是的,我已經改變了我的答案。雖然它似乎工作,如果你只引入新的變量(並且以後不改變它們的值) – MartinStettner

+3

請注意任何人閱讀這個答案:請不要做這種愚蠢的事情。正確的解決方案是使用字典或列表。 –

2

依靠變量的名稱並改變它們並不是最好的選擇。

正如人們在評論中指出的那樣,最好是使用字典或列表來代替。