Для недавнего скрипта мне пришлось перебирать возможные потоки через ветвящееся дерево. Я построил словарь, который будет содержать состояние запуска для каждого элемента, чтобы я мог его оценить. Например:Сокращение вложенных циклов, которые строят словари/строки (стиль ветвящегося дерева)
for a in range(0, 2):
for b in range(0, 2):
for c in range(0, 2):
for d in range(0, 2):
...
run = [a,b,c,d ...]
К сожалению, это началось с малого, но выросло до более дюжины штатов. Как это можно свести к устранению всех вложенных циклов?
Будет ли подобный ответ отличаться, если в некоторых из состояний было 3 или 4 состояния вместо 2?
Аналогично, как будет затронута одна и та же проблема, если каждый цикл был из списка функций? Я подозревал, что все будет так. Например:
def leet_lookup(char):
table = {"a": ["a","A","@"],
"b": ["b", "B", "8"],
"c": ["c", "C", "<"],
"e": ["e", "E", "3"],
"i": ["i", "I", "1"],
"l": ["l", "L", "1"],
"o": ["o", "O", "0"],
"t": ["t", "T", "7"] }
try:
result = table[char.lower()]
except KeyError:
result = [char.lower(), char.upper()]
return result
result = []
# V o l l e y b a l l = 10 chars
for c1 in leet_lookup('v'):
for c2 in leet_lookup('o'):
for c3 in leet_lookup('l'):
for c4 in leet_lookup('l'):
for c5 in leet_lookup('e'):
for c6 in leet_lookup('y'):
for c7 in leet_lookup('b'):
for c8 in leet_lookup('a'):
for c9 in leet_lookup('l'):
for c10 in leet_lookup('l'):
result.append("%s%s%s%s%s%s%s%s%s%s" % (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10))
приятно Тхо решение! – soupault
Отличный ответ и совет, второй был особенно сложным, но ваше решение отлично! Спасибо –