我需要一个函数返回给定段的子段。例如,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 2011-12-27 15:32:44
我觉得你已经忘了你的结果集中的组合“(”A“,”BD“,”C“)? – Howard 2011-12-27 15:38:05