2017-04-04 97 views
1

我有一些數據的數組,我想在其上執行類似的計算,所以我想通過名稱來遍歷它們。例如一些僞代碼:Python通過基於名稱的變量迭代

l = 1000 # example length of data arrays 
n = 3 # number of arrays 
data_1 = [1] * l 
data_2 = [2] * l 
data_3 = [3] * l 

# l can vary in size, so arrays aren't fixed length 

for i in range(n): 
    for j in range(l): 
     data_[i][j] = some_length_based_maths[j] 

這是呼喚他們的名字中的數據陣列在的投擲我從一個迭代的方式的語法。

我可能應該使用二維數組或其他東西,並調用元素[i][j],但如果可能的話,更容易在這個應用程序中保持它的全部分離。

謝謝!

+5

你爲什麼不使用詞典? 所以你可以有「單獨的」一維數組,你可以通過名稱訪問(鍵) – FLab

+0

我聽說過「熊貓」,如果這對此有用?作爲旁邊的 –

+1

,請注意'range(3)'返回'[0,1,2]' – asongtoruin

回答

2

你會更好地使用Python Dictionaries來獲得更清晰的解決方案。對於當前的需求,你可能會做這樣的事情:

for i in range(n): 
    for j in range(l): 
     eval('data_'+str(i))[j] = some_length_based_maths[j] 

和排序免責聲明: Is using eval in Python a bad practice?

一種更好的方法來處理這(使用詞典)

l = 1000 # example length of data arrays 
data_dict = {} 
data_dict['data_1'] = [1] * l 
data_dict['data_2'] = [2] * l 
data_dict['data_3'] = [3] * l 

# l can vary in size, so arrays aren't fixed length 

for i in data_dict: 
    for j in range(l): 
     data_dict[i][j] = some_length_based_maths[j] 
+3

我很擔心這個問題,因爲雖然它確實回答了這個問題,但它幾乎肯定是OP問題的錯誤解決方案。我認爲你的回答應該明確這一點,並提供一個如何正確使用字典來做到這一點的例子。 –

+1

我同意。已編輯添加基於字典的解決方案 –

+1

您也可以使用代碼創建data_dict。 'data_dict = {'data_'+ str(i):[i] * l for i in range(n)}' –

0

可以遍歷通過創建列表清單的數量列表:

for list in [list_1, list_2, list_3]: 
    # operate on local variable `list` 

當然,如果您有大量列表,這很麻煩,但是您應該考慮從一開始就創建一個包含各個變量的列表/字典實例。

0

也許這是不是最好的解決辦法,但你可以嘗試這樣的事情:

def some_length_based_maths(array): 
    result=[] 
    i=0 
    while i<len(array): 
     do_something=..... 
     result.append(do_something) 
     i+=1 
    return (result) 


data_1 = [.....] 
data_2 = [.....] 
data_3 = [.....] 


i=0 
while i<3: 
    if i==0: 
     array_result1=some_length_based_maths(data_1) 
    elif i==1: 
     array_result2=some_length_based_maths(data_2) 
    else: 
     array_result3=some_length_based_maths(data_3) 
    i+=1 

你有你的3陣列,爲他們每個人的調用函數「some_length_based_maths」,對陣列中的每個元素你做了一些計算,並將結果引入另一個數組,並將其返回給主數據庫。

這只是一個例子,可以幫助你,但如果你給我更多的細節可以在幻燈片不同的方式來構造;)

0

如果您希望用他們的名字來訪問的變量,你可以使用取決於您的上下文,vars(),globals()locals()的替代解決方案。您可以瞭解更多關於here的差異。

你的循環應該再是這樣的:

for i in range(n): 
    for j in range(l): 
     vars()['data_'+str(i)][j] = some_length_based_maths[j]