2017-04-05 37 views
4

我想將單詞分成子詞 - 所有可能的排列組合。將單詞分解成所有可能的「子詞」 - 所有可能的組合

Input: Bang 
Output: [['B','ang'], ['Ba','ng'], ['Ban','g'], ['B','a','ng'], ['B','an','g'], ['Ba','n','g'], ['B','a','n','g']] 

我希望我涵蓋所有possbile方式來安排'爆炸'。我想了很久,卻找不到方法。

list(permutations('Bang', 3)) 

排列組合方法不返回整個單詞。我可以分成2個單詞,但無法將單詞分成3個或更多(對於更大的單詞)。

拆分成2個單詞可以使用其中一個成員建議的以下代碼完成。

[ [word[:i],word[i:]] for i in range(1,len(word))] 
+0

如果抽象地想到此,有三個地點,你可以拆分它們是獨立的字符串彼此的。所以你可以從創建所有可能的字符串應該被拆分的列表開始,例如, G。 '['B','ang']''[True,False,False]'。然後從那裏走回去。 – Joooeey

+0

請發佈您的當前代碼,包括您在多個拆分中的最佳嘗試。 – Prune

回答

2

這裏亞去..

def combos(s): 
    if not s: 
    return 
    yield (s,) 
    for i in range(1, len(s)): 
    for c in combos(s[i:]): 
     yield (s[:i],) + c 

for c in combos('Bang'): 
    print c 

輸出:

('Bang',) 
('B', 'ang') 
('B', 'a', 'ng') 
('B', 'a', 'n', 'g') 
('B', 'an', 'g') 
('Ba', 'ng') 
('Ba', 'n', 'g') 
('Ban', 'g') 
+0

該解決方案看起來非常優雅。我會試着瞭解它是如何工作的。 – Aman

+0

謝謝 - 是啊玩!探索遞歸如何工作是一個很好的問題。 – Triptych