У меня есть функция, которая принимает удовольствие несколько параметров p0, p1, .. Для каждого параметра я дать список возможных значений:Продукт Python itertools, но условный?
p0_list = ['a','b','c']
p1_list = [5,100]
теперь я могу назвать свою функцию для каждой комбинации p0, p1
for i in itertools.product(*[p0,p1]):
print fun(i)
Теперь возникает проблема: что, если я уже знаю, что параметр p1 влияет только на результат забавы, если p0 является «a» или «c»? В этом случае я нужен мой список комбинаций параметров выглядеть следующим образом:
[('a', 5), ('a',100), ('b', 5), ('c',5), ('c', 100)]
So («B», 100) просто опущена, так как это было бы ненужной оценка удовольствия.
Мое окончательное решение:
param_lists = [['p0', ['a','b','c']],['p1, [5,100]]]
l = itertools.product(*[x[1] for x in param_lists])
l = [x for x in l if not x[0] == 'b' or x[1]==5]
Я использовал этот подход для 5 параметров и различных условий и она отлично работает. Это довольно легко читать. Этот код вдохновлен ответами Corley Brigmans и nmcleans.
Я бы лично просто воспользовался вашими вызовами функций и позвонил им с каждой комбинацией. – roippi
Для этого потребуется указать, какие комбинации дают одинаковые результаты, что дало бы мне возможность удалить эти комбинации. Правильно? – HeinzKurt