您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python字符串子集的所有组合

5b51 2022/1/14 8:22:59 python 字数 2104 阅读 570 来源 www.jb51.cc/python

我需要字符串子集的所有组合.另外,长度为1的子集之后只能是长度> 1的子集.例如对于字符串4824,结果应该是: [ [4, 824], [4, 82, 4], [48, 24], [482, 4], [4824] ] 到目前为止,我设法检索所有可能的子集: length = len(number) ss = [] for i in xrange(length):

概述

[ [4,824],[4,82,4],[48,24],[482,[4824] ]

到目前为止,我设法检索所有可能的子集:

length = len(number)
    ss = []
    for i in xrange(length):
        for j in xrange(i,length):
            ss.append(number[i:j + 1])

这给了我:

['4','48','482','4824','8','82','824','2','24','4']

但我现在不知道如何将它们结合起来.

def partitions(s):
    if s:
        for i in range(1,len(s) + 1):
            for p in partitions(s[i:]):
                yield [s[:i]] + p
    else:
        yield []

这将迭代所有可能的第一个段(一个字符,两个字符等),并将这些段与字符串的相应剩余部分的所有分区组合在一起.

>>> list(partitions("4824"))
[['4','4'],['4','24'],'824'],['48',['482',['4824']]

现在,您可以只过滤那些符合您条件的条件,即那些没有两个连续长度为1的子串的条件.

>>> [p for p in partitions("4824") if not any(len(x) == len(y) == 1 for x,y in zip(p,p[1:]))]
[['4',['4824']]

这里,zip(p,p [1:])是迭代所有连续项对的常用方法.

更新:实际上,将约束直接合并到分区函数中也不是那么难.只需跟踪最后一段并相应地设置最小长度.

def partitions(s,minLength=1):
    if len(s) >= minLength:
        for i in range(minLength,len(s) + 1):
            for p in partitions(s[i:],1 if i > 1 else 2):
                yield [s[:i]] + p
    elif not s:
        yield []

演示:

>>> print list(partitions("4824"))
[['4',['4824']]

总结

以上是编程之家为你收集整理的python字符串子集的所有组合全部内容,希望文章能够帮你解决python字符串子集的所有组合所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶