使用数组名循环?

问题描述 投票:0回答:3

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

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”中。

python sorting multidimensional-array
3个回答
1
投票

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

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

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])

数组通过引用传递,因此您的原始数组将根据需要修改其内容。


1
投票

Sembei 轻松修复:

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

0
投票

使用

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():动态评估表达式

© www.soinside.com 2019 - 2024. All rights reserved.