2015-06-09 4 views
2

Я работаю над скриптом, чтобы найти оптимальные параметры, которые нужно передать методу. Я создал список возможных значений параметров, которые я хотел бы повторить, и задавался вопросом, могу ли я избежать записывая вложенные петли для них.Python избежать нескольких вложенных циклов

Вот грубый набросок кода

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,...) 

мне было интересно, как это можно реализовать в лучшую сторону. Я бы предпочел, чтобы в решении я мог легко перетасовать параметр, который находится во внешнем цикле. и т.д.

+0

Вам нужно проверить каждую комбинацию или перестановку? – TigerhawkT3

+0

@ TigerhawkT3: Да –

+1

Почему вы хотите избежать вложенных циклов точно? – River

ответ

2

Вы можете использовать itertools.product:

import itertools 

for args in itertools.product(param_1, param_2, param_3, param_4): 
    do_something(*args) 

Это создает декартово произведение всех возможных комбинаций параметров, которые передаются в do_something. Вы также можете изменить порядок передачи переменных param_X в itertools.product, что влияет на порядок передачи аргументов do_something.

Смежные вопросы