我有一个连字符分隔的字符串列表。每个字符串的长度可以不同。
例如:
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
来做这件事,但根本不是很成功。解决这个问题的最佳方法是什么?
答案 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']