获取连字符分隔字符串的所有可能组合

时间:2017-06-10 10:04:22

标签: string python-2.7 list

我有一个连字符分隔的字符串列表。每个字符串的长度可以不同。

例如:

l = ["a-b-d-e", "f-g", "aa-bb-dd-ee"]

我正在尝试为每个连字符分隔的字符串获取所有可能的组合,并期望每个字符串输出如下:

l [0]的示例:

a-b-d-e
a-bde
a-bd-e
ab-de
abd-e
abde

l [1]的示例:

f-g
fg

** l [2]的例子:**

aa-bb-dd-ee
aa-bbddee
aa-bbdd-ee
aabb-ddee
aabbdd-ee
aabbddee

我试图使用itertools来做这件事,但根本不是很成功。解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

你只是使用二进制算术,你从0到可能数的计数, length-1th 2的幂:

def insertHyphens(s, bitset):
    """ The function to set hyphens at the same positions the number bitset has a 1 """
    return "".join(c + '-'*bool(bitset & (1 << i)) for i, c in enumerate(s))

def getCombinations(s):
    """ the generator yielding each possibility """
    lenS = len(s)
    for i in range((1 << lenS) >> 1): #1 << (lenS-1) makes problems with one letter
        yield insertHyphens(s, i)

有些使用:

>>> list(hyphens.getCombinations("abc"))
['abc', 'a-bc', 'ab-c', 'a-b-c']

编辑:要将它与' - '分隔的字母/单词一起使用,就像在你的情况下一样,只需将它拆分:

>>> list(hyphens.getCombinations("a-b-c-def".split('-')))
['abcdef', 'a-bcdef', 'ab-cdef', 'a-b-cdef', 'abc-def', 'a-bc-def', 'ab-c-def', 'a-b-c-def']

您的示例:

>>> list(hyphens.getCombinations(l[0].split('-')))
['abcd', 'a-bcd', 'ab-cd', 'a-b-cd', 'abc-d', 'a-bc-d', 'ab-c-d', 'a-b-c-d']
>>> list(hyphens.getCombinations(l[1].split('-')))
['fg', 'f-g']