Python避免了多个嵌套循环
我正在编写一个脚本,以找到要传递给方法的最佳参数。我已经创建了一个可能的参数值列表,我想迭代,我想知道是否可以避免为相同的参数编写嵌套循环 下面是代码的大致草图Python避免了多个嵌套循环,python,python-2.7,Python,Python 2.7,我正在编写一个脚本,以找到要传递给方法的最佳参数。我已经创建了一个可能的参数值列表,我想迭代,我想知道是否可以避免为相同的参数编写嵌套循环 下面是代码的大致草图 param_1 = [1,2,3,5,10] param_2 = [100,200] param_3 = [True, False] param_4 = [True, False] . . for p1 in param_1: for p2 in param_2: . . do_somethin
param_1 = [1,2,3,5,10]
param_2 = [100,200]
param_3 = [True, False]
param_4 = [True, False]
.
.
for p1 in param_1:
for p2 in param_2:
.
.
do_something(p1,p2,...)
我想知道如何以更好的方式实现它。我更希望在解决方案中,我可以轻松地洗牌哪个参数停留在最外层的循环中。等等。您可以使用:
这将创建所有可能参数组合的笛卡尔积,这些组合将传递给
do\u something
。您还可以修改param_X
变量传递到itertools.product
的顺序,这会影响参数传递到do_something
的顺序。为什么要完全避免嵌套循环?然后我建议查看itertools.compositions
和itertools.permutations
,但必须先退一步,确保您以正确的方式解决问题。对于itertools.product中的p(param_1,param_2,…):
有效,尽管它只是在相同的嵌套循环上涂上一层漆。我可以假设,对于嵌套循环,发生了什么,这是非常清楚的。它可能没有那么“优雅”,但我从来没有太担心过。有时候,多一点代码就更容易理解了。@River:很抱歉给你带来了困惑。我心目中的形象更好。在当前状态下,我有10个嵌套循环,我认为这是错误的。这里不关心速度
import itertools
for args in itertools.product(param_1, param_2, param_3, param_4):
do_something(*args)