Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python根据变量的名称对其进行迭代_Python_Arrays_Loops_For Loop_Iteration - Fatal编程技术网

Python根据变量的名称对其进行迭代

Python根据变量的名称对其进行迭代,python,arrays,loops,for-loop,iteration,Python,Arrays,Loops,For Loop,Iteration,我有一些数据数组,我想对它们执行类似的计算,所以我想根据它们的名称对它们进行迭代。一些伪代码,例如: 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

我有一些数据数组,我想对它们执行类似的计算,所以我想根据它们的名称对它们进行迭代。一些伪代码,例如:

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]
以及某种免责声明:

更好的处理方法(使用字典)


通过创建列表列表,可以迭代多个列表:

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
def一些基于长度的数学(数组):
结果=[]
i=0

虽然i如果您希望根据变量名称访问变量,您可以根据您的上下文使用
vars()
globals()
locals()
的替代解决方案。您可以了解更多有关差异的信息

然后,您的循环应该如下所示:

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

你为什么不用字典呢?因此,您可以使用“单独的”1D数组,您可以通过名称(键)访问这些数组。我听说
pandas
如果这样做有用的话?另外,请注意
range(3)
返回
[0,1,2]
@RichardHall它当然可以,但如果没有更多信息,很难说。在这种情况下,带有3列的
pandas.DataFrame
应该可以工作。此外,出于性能原因,您应该尽量避免在Python中迭代大型数组;尽可能使用矢量化函数,如
pandas
numpy
提供的函数。@erip抱歉,我的2.7版本已经过时了。我试图指出的一点是,在伪代码中,无论Python版本如何,都会尝试访问
数据0
,而不会尝试访问
数据3
,原因是
范围访问的值。但你的观点是正确的。我对这一点持谨慎态度,因为虽然它确实回答了问题,但它几乎肯定是OP问题的错误解决方案。我认为你的答案应该清楚地说明这一点,并提供一个如何使用字典正确地做这件事的例子。我同意。已编辑以添加基于词典的解决方案您也可以使用代码创建数据目录<代码>数据dict={'data'+str(i):[i]*l表示范围(n)内的i}
for i in range(n): 
    for j in range(l):
        vars()['data_'+str(i)][j] = some_length_based_maths[j]