我需要一個函數返回給定段的子段。例如,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