Python根据名称迭代变量

时间:2017-04-04 10:49:47

标签: 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 j in range(l):
        data_[i][j] = some_length_based_maths[j]

这是通过他们的名字以迭代的方式调用数据数组的语法,这会让我失望。

我可能应该使用2D数组或其他东西并调用元素[i][j],但如果可能的话,在这个应用程序中将它们全部分开会更容易。

谢谢!

4 个答案:

答案 0 :(得分:2)

最好使用Python词典来获得更清晰的解决方案。根据您当前的要求,您可以执行以下操作:

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]

答案 1 :(得分:0)

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

for list in [list_1, list_2, list_3]:
    # operate on local variable `list`

当然,如果你有大量的列表,这很麻烦,但是你应该考虑从一开始就创建一个单独变量的列表/字典instad。

答案 2 :(得分: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”,对于你做一些计算的数组的每个元素,你将结果引入另一个你给回主数组的数组。

这只是一个可以帮助你的例子,但是如果你给我更多细节,它可以用幻灯片的不同方式构建;)

答案 3 :(得分:0)

如果您想根据名称访问变量,可以使用globals()locals()for i in range(n): for j in range(l): vars()['data_'+str(i)][j] = some_length_based_maths[j] 的替代解决方案,具体取决于您的具体情况。您可以详细了解差异here

你的循环应如下所示:

$linksArray = array('1',NULL,'2',null,null,null,'3','4');
foreach($linksArray as $link)
{
if($link == '')
{
    unset($link);
}
}
print_r($linksArray);