У меня есть проблема с проблемой, которая стала немного проблемной по мере возникновения проблем.
ситуация:
Мне нужно объединить элементы в списке (списках) переменных размеров с переменнойэлементы размера, сохраняйте эти комбинации и затем просматривайте их.Я попробовал itertools, но я получаю слишком много комбинаций, которые я не знаю, как правильно «очистить».Я получаю правильные комбинации, просто создав столько циклов for, сколько элементов op в списке ввода.
пример: ПРИМЕЧАНИЕ. Количество словарей op может отличаться!Игнорируйте значения как таковые, важно то, что я использую список словарей "op", чтобы в основном получить все пользовательские элементы управления в элементе Nuke GUI, называемом NoOp node.Мне нужно перебрать каждый из элементов управления для каждого значения, составив все возможные комбинации:
for option1 in op1["options"]:
for option2 in op2["options"]:
for option3 in op3["options"]:
print op1["control"], option1, op2["control"], option2, op3["control"], option3
Сейчас я просто пытаюсь понять, как определить базовый случай: /
def getCombos(controls, n = 0):
#combos = []
if n == 0:
#return [(control["control"], option) for control in controls for option in control["options"]]
return [(item["control"], option) for item in controls for option in item["options"]]
else:
for control in controls:
return(getCombos(controls, n-1))
n -= 1
op1 = {"control": "Material", "options": ["Glass", "Metal", "Wood"]}
op2 = {"control": "Base",
"options": ["Chrome", "Brass", "Bronce", "Gold", "Nickel", "Red Gold"]}
op3 = {"control": "Color", "options": ["Red", "Blue", "Green", "Cyan", "SomeWonderfulNewColor"]}
controls = [op1, op2, op3]
#NOTE: number of elements (dict) in list controls may vary!
for i,combo in enumerate(getCombos(controls, n=len(controls))):
print i, combo
ATM, этот сценарий просто рекурсивно печатает элементы управления
Как использовать рекурсию для этого случая, и, что более важно, должен ли я использовать рекурсию вообще, и если да, как мне подходить к такому случаюи разбить его на составляющие?Cheers,