Мне нужна функция, которая возвращает подсегменты для данного сегмента. Например, sub_combinations("ABCD")
должен давать:Подходящие подкомпонования
("A", "B", "C", "D")
("A", "B", "CD")
("A", "BC", "D")
("A", "BCD")
("AB", "C", "D")
("AB", "CD")
("ABC", "D")
("ABCD")
("ABD", "C") *
("AC", "BD") *
("AC", "B", "D") *
("ACD", "B") *
("AD", "BC") *
("AD", "B", "C") *
("A","C","B","D")
не действует, так как он не в порядке последовательности. Другими словами, вместо ("A","B","C","D")
.
("AC", "B", "D")
действителен, так как «C» следует «A» в последовательном порядке, а «B» следует за «AC».
Это, насколько я получил:
def sub_combinations(segment):
for i in range(1, len(segment)):
for j in sub_combinations(segment[i:]):
yield (segment[:i],) + j
yield (segment,)
for i in sub_combinations("ABCD"):
print(i)
('A', 'B', 'C', 'D')
('A', 'B', 'CD')
('A', 'BC', 'D')
('A', 'BCD')
('AB', 'C', 'D')
('AB', 'CD')
('ABC', 'D')
('ABCD',)
Однако это не хватает этих дополнительных комбинаций.
Любые предложения о том, как действовать?
хе-хе, что та часть, которая держала меня от написания рабочего ответа на ваш предыдущий вопрос;) – Nicolas78
Я думаю, вы забыли комбинацию '(« A »,« BD »,« C »)' в вашем результирующем наборе? – Howard