2017-04-04 98 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]