簡體   English   中英

Python根據其名稱遍歷變量

[英]Python iterate through variables based off of their names

我想對一些數據數組進行類似的計算,因此我想根據它們的名稱遍歷它們。 一些偽代碼例如:

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]

這是一種以迭代方式按名稱調用數據數組的語法,這使我不滿意。

我可能應該使用2D數組或其他東西,然后將元素命名為[i][j] ,但如果可能的話,將它們全部分開更容易。

謝謝!

使用Python字典提供更干凈的解決方案會更好。 對於當前要求,您可以執行以下操作:

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

以及某種免責聲明: 在Python中使用eval是一種不好的做法嗎?

處理此問題的更好方法(使用字典)

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]

您可以通過創建列表列表來遍歷多個列表:

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

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

也許這不是最好的解決方案,但是您可以嘗試執行以下操作:

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”,對數組的每個元素進行一些計算,然后將結果引入另一個數組中,並返回給主數組。

這只是一個示例,可以為您提供幫助,但是,如果您給我更多詳細信息,則可以用不同的幻燈片形式進行構造;)

如果要基於變量名訪問變量,則可以根據上下文使用vars()globals()locals()的替代解決方案。 您可以在此處了解有關差異的更多信息。

然后,您的循環應如下所示:

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

暫無
暫無

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

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