使用数组名进行循环?



我尝试遍历具有相似名称的数组,如:

a0=[]
a1=[]
a2=[]
a3=[]
a4=[]
for k in range(len(mlac)):     # mlac.shape (17280, 5)
for I in range(len(mlac[0])):
'a%i'%I.append(mlac[k][I])
# or : 'a{}'.format(I).append(mlac[k][I])

但是它们在循环中都被认为是字符串,不能追加。

因此,对于'I'的每次迭代,我们取'mlac'的相应列,并将相应迭代的数组'a'相加。

尝试将字符串直接用作变量名并不是一个好主意。

如果允许更改这些数组,则应该将它们更改为列表的列表或字典。如果没有,您可以将这些现有数组加载到另一个数据结构中,在那里您可以轻松地遍历它们。

a0=[]
a1=[]
a2=[]
a3=[]
a4=[]
list_of_lists = [a0, a1, a2, a3, a4]
for k in range(len(mlac)):     # mlac.shape (17280, 5)
for I in range(len(mlac[0])):
list_of_lists[I].append(mlac[k][I])

数组是通过引用传递的,所以你的原始数组的内容将根据你的需要进行修改。

由Sembei轻松修复:

A = [[],[],[],[],[]]
for k in range(len(mlac)):
for i in range(len(mlac[0])):
A[i].append(mlac[k][i])

使用eval()函数是否适用于您的用例?

下面是一个简单的代码片段,演示如何使用它:
a0=[]
a1=[]
a2=[]
a3=[]
a4=[]
a5=[]
mlac = [[y for y in range(5)] for x in range(5)] # Mock version of your mlac multidimentional array
for k in range(len(mlac)):     
for I in range(len(mlac[0])):
eval(f"a{I}.append(mlac[k][I])")
print(a0)
print(a1)
print(a2)
print(a3)
print(a4)
'''
Output:
[0, 0, 0, 0, 0]
[1, 1, 1, 1, 1]
[2, 2, 2, 2, 2]
[3, 3, 3, 3, 3]
[4, 4, 4, 4, 4]
'''

关于如何使用eval()函数的更多示例可以在这里找到:Python eval():动态计算表达式