将一个单词拆分成所有可能的“子词” - 所有可能的组合

6
我正在尝试将一个单词分解成子词 - 所有可能的排列组合。
Input: Bang
Output: [['B','ang'], ['Ba','ng'], ['Ban','g'], ['B','a','ng'], ['B','an','g'], ['Ba','n','g'], ['B','a','n','g']]

我希望我已经涵盖了所有排列“Bang”的可能方式。我花了很长时间思考,但是找不到方法。

list(permutations('Bang', 3))

排列方法无法返回完整的单词。我可以将其分成2个单词,但无法将一个单词分成3个或更多个(针对更长的单词)。

以下代码是一位成员建议的,可以将单词拆分为两个单词。

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

如果你从抽象的角度来考虑,有三个位置可以独立地分割字符串。所以你可以先创建所有可能的字符串分割列表,例如 ['B','ang'][True, False, False]。然后用循环继续实现。 - Joooeey
请发布您当前的代码,包括您最好的多重分割尝试。 - Prune
1个回答

4

请看下面的内容。

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')

解决方案看起来相当优雅。我会尝试理解它的工作原理。 - Aman
谢谢 - 是的,尽情摆弄吧!这是一个很好的问题,可以探索递归如何工作。 - Kenan Banks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接