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]