python需要的单词_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,combinations,permutation,combinatorics

来源: https://codeday.me/bug/20190725/1529220.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值