[英]Iterate through columns in python and insert the columns names based on a condition
[英]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.