Python:使用一系列字符查找所有可能的单词组合(分词)

我正在做一些像下面这样的分词实验.

lst是一系列字符,输出是所有可能的单词.

lst = ['a', 'b', 'c', 'd']

def foo(lst):
    ...
    return output

output = [['a', 'b', 'c', 'd'],
          ['ab', 'c', 'd'],
          ['a', 'bc', 'd'],
          ['a', 'b', 'cd'],
          ['ab', 'cd'],
          ['abc', 'd'],
          ['a', 'bcd'],
          ['abcd']]

我已经检查了itertools库中的组合和排列,
并尝试了combinatorics.
然而,似乎我在看错了,因为这不是纯粹的排列和组合……

似乎我可以通过使用大量循环来实现这一点,但效率可能很低.

编辑

单词顺序很重要,因此[‘ba’,’dc’]或[‘cd’,’ab’]等组合无效.

订单应始终从左到右.

编辑

@Stuart的解决方案在Python 2.7.6中不起作用

编辑

@Stuart的解决方案在Python 2.7.6中有效,请参阅下面的注释.

解决方法:

itertools.product应该能够帮助你.

这个想法是这样的: –
考虑由板块分隔的A1,A2,…,AN.将有N-1板.
如果有平板,则存在分段.如果没有平板,则有连接.
因此,对于给定的长度为N的序列,您应该具有2 ^(N-1)个这样的组合.

就像下面这样

import itertools
lst = ['a', 'b', 'c', 'd']
combinatorics = itertools.product([True, False], repeat=len(lst) - 1)

solution = []
for combination in combinatorics:
    i = 0
    one_such_combination = [lst[i]]
    for slab in combination:
        i += 1
        if not slab: # there is a join
            one_such_combination[-1] += lst[i]
        else:
            one_such_combination += [lst[i]]
    solution.append(one_such_combination)

print solution
上一篇:python – 获取一组SNP的所有可能的基因型组合的方法


下一篇:PAT_A1067#Sort with Swap(0, i)