我有一些数据数组,我想执行类似的计算,所以我想根据它们的名称迭代它们。一些伪代码例如:
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]
,但如果可能的话,在这个应用程序中将它们全部分开会更容易。
谢谢!
答案 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);