这个问题现在已经有一段时间了.有没有更简单的方法for在python中编写嵌套循环?例如,如果我的代码是这样的:
for y in range(3):
for x in range(3):
do_something()
for y1 in range(3):
for x1 in range(3):
do_something_else()
Run Code Online (Sandbox Code Playgroud)
会有更简单的方法吗?我知道这段代码有效但是当你缩进而不是像我一样使用2个空格时,它可能会成为一个问题.
在示例中,只有4个嵌套for循环使事情变得更容易.
我有一个有一堆参数的函数.我不想手动设置所有参数,而是要执行网格搜索.我有一个每个参数的可能值列表.对于每个可能的参数组合,我想运行我的函数,该函数报告我的算法在这些参数上的性能.我想将这个结果存储在一个多维矩阵中,以便后面我可以找到最大性能的索引,这反过来会给我最好的参数.以下是代码的编写方式:
param1_list = [p11, p12, p13,...]
param2_list = [p21, p22, p23,...] # not necessarily the same number of values
...
results_size = (len(param1_list), len(param2_list),...)
results = np.zeros(results_size, dtype = np.float)
for param1_idx in range(len(param1_list)):
for param2_idx in range(len(param2_list)):
...
param1 = param1_list[param1_idx]
param2 = param2_list[param2_idx]
...
results[param1_idx, param2_idx, ...] = my_func(param1, param2, ...)
max_index = np.argmax(results) # indices of best parameters!
Run Code Online (Sandbox Code Playgroud)
我想保留第一部分,我按原样定义列表,因为我希望能够轻松地操作我搜索的值.
我还希望最终得到结果矩阵,因为我将可视化更改不同参数如何影响算法的性能.
但是,中间的位是相当重复和笨重的(特别是因为我有很多参数,我可能想添加或删除参数),我觉得应该有一个更简洁/优雅的方式来初始化结果矩阵,迭代所有索引,并设置适当的参数.
那么,有吗?