2017-04-05 4 views
4

Ich versuche, ein Wort in Unterwörter zu spalten - alle möglichen Permutationen.Ein Wort in alle möglichen "Unterwörter" aufteilen - Alle möglichen Kombinationen

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

Ich hoffe, ich habe alle möglichen Möglichkeiten abgedeckt, um 'Bang' zu arrangieren. Ich habe lange darüber nachgedacht, konnte aber keinen Weg finden.

list(permutations('Bang', 3)) 

Permutationsmethode gibt nicht das gesamte Wort zurück. Ich kann in zwei Wörter aufteilen, aber nicht in der Lage sein, ein Wort in drei oder mehr zu teilen (für ein größeres Wort).

Die Aufteilung in 2 Wörter kann mit dem folgenden Code erfolgen, der von einem der Mitglieder vorgeschlagen wurde.

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

Wenn Sie auf eine abstrakte Weise daran denken, gibt es drei Orte, an denen Sie die Zeichenfolge aufteilen, die unabhängig sind von einander. Sie können also alle möglichen Listen erstellen, in denen die Zeichenfolge aufgeteilt werden soll, z. G. '[True, False, False]' für '['B', 'ang']'. Dann geh von dort mit Schleifen. – Joooeey

+0

Bitte posten Sie Ihren aktuellen Code, einschließlich Ihres besten Versuches bei mehreren Splits. – Prune

Antwort

2

Hier gehen ya ..

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 

Ausgang:

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

Die Lösung sieht ziemlich elegant aus. Ich werde versuchen zu verstehen, wie es funktioniert. – Aman

+0

Danke - ja herumspielen! Es ist ein nettes Problem zu erforschen, wie Rekursion funktioniert. – Triptych

Verwandte Themen