2017-06-30 18 views
0

itertools.combinationsを使用して、長さが最大nのアルファベットの文字のすべての組み合わせを返そうとしています。python2.7のitertoolsを使った文字の組み合わせ

def string_combinations(alphabet, n): 
    ''' 
    Parameters 
    ---------- 
    alphabet : {str} 
    n : {int} 

    Returns 
    ------- 
    list : {list} of {str}  

    Example 
    ------- 
    >>> string_combinations('abc', 2) 
    ['a', 'b', 'c', 'ab', 'ac', 'bc'] 
    ''' 

は、これまでのところ私は、リスト[('a',), ('b',), ('c',), ('a', 'b'), ('a', 'c'), ('b', 'c')]どのように私は私の希望のソリューションを達成すべきで

return [str(x) for i in range(1,n+1) for x in itertools.combinations(alphabet,i)] 

が、itertools.combinations返すタプルを持っていますか?

+0

それで、 'itertools'はあなたが必要とするものを行います。どうしたの? – ForceBru

+0

私はすべての組み合わせを含むリストを取得しようとしています。 ['a'、 'b'、 'c'、 'ab'、 'ac'、 'bc']私は[(a、、)、(b、)、(c、)、(a、b)、(a、c)、(b、 'c')]私が望むものではない。 @ForceBru – Meruemu

答えて

1

あなたはitertoolsによって返されるすべての文字列を連結することができます。

result = ["".join(comb) for ...] 

"".join(iterable)連結し、すべての文字列を取得しています

result = map("".join, (comb for i in range(1, n+1) for comb in itertools.combinations(alphabet, i))) 

これはリスト内包内"".joinに電話を置くと同じですイテラブルから:

"".join(('a', 'b', 'c')) == "abc" 
関連する問題