2017-06-10 4 views
0

ハイフンで区切られた文字列のリストがあります。各文字列の長さが異なる場合があります。例えばハイフンで区切られた文字列のすべての可能な組み合わせを取得します。

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

私はそれぞれハイフンで区切られた文字列のためのすべての可能な組み合わせを取得し、各文字列のために、このような出力を期待しようとしています:[0]リットル用

例: L用

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

実施例[1]:

f-g 
fg 

**リットルのための例[2]:**

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

私は、このためにitertoolsを使用しようとしているが、全く非常に成功しませんでした。これを解決する最良の方法は何ですか?

答えて

0

あなただけのバイナリ算術を使用して、あなたは0から可能性の数をカウントし、2の長-1番目のパワー:

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'] 
+0

ありがとうございました。しかし、生成された出力は私が期待したものではありません、それはa-b-c-df-gとa-b-c-d-f-gです。 – roesi

+0

リスト全体ではなく、関数に '' l''の要素を入力する必要があります。リストとしてパラメータを渡すと、要素は1つのままであり、要素間のギャップは変更されます。 – cmdLP

+0

ありがとうございました!あなたは私の一日を救った! – roesi

関連する問題