2016-10-31 11 views
1

私は、文字の組み合わせ/置換を作成するためのエレガントなコードを考え出しています:文字の組み合わせと並べ替え

たとえば、

'a' ----> ['a', 'aa', 'A', 'AA', 'aA', 'Aa'] 

私がこれまで持っているので、エレガントではない解決策:

# this does it... 
from itertools import permutations 
char = 'a' 
p = [char, char*2, char.upper(), char.upper()*2] 
pp = [] # stores the final list of permutations 
for j in range(1,3): 
    for i in permutations(p,j): 
     p2 = ''.join(i) 
     if len(p2) < 3: 
      pp.append(p2) 
print pp 
['a', 'aa', 'A', 'AA', 'aA', 'Aa'] 

#this also works... 
char = 'a' 
p = ['', char, char*2, char.upper(), char.upper()*2] 
pp = [] # stores the final list of permutations 
for i in permutations(p,2): 
    j = ''.join(i) 
    if len(j) < 3: 
     pp.append(j) 
print list(set(pp)) 
['a', 'aa', 'aA', 'AA', 'Aa', 'A'] 

# and finally... so does this: 
char = 'a' 
p = ['', char, char.upper()] 
pp = [] # stores the final list of permutations 
for i in permutations(p,2): 
    pp.append(''.join(i)) 
print list(set(pp)) + [char*2, char.upper()*2] 
['a', 'A', 'aA', 'Aa', 'aa', 'AA'] 

私は、私はコードがこれらの順列を作成したいのですが、単一の文字(結果の順序は重要ではありません)からラムダにはそれほど大したものではなく、もっと良い解決策がある場所であると思われます。

希望の結果に最もエレガントな/ピジョンの方法を見つけるのを手助けできますか?

答えて

1

あなたは、単に期待される結果

>>> pop = ['a', 'A'] 
>>> from itertools import product 
>>> [''.join(item) for i in range(len(pop)) for item in product(pop, repeat=i + 1)] 
['a', 'A', 'aa', 'aA', 'Aa', 'AA'] 
+0

うーん、私はそれを好きを取得するために、異なるrepeat値でitertools.productを使用することができます。 pop + [''製品のアイテムの結合(pop、repeat = 2)] –

+0

@JayMarm私が提供した答えは一般的なものです。必要に応じてカスタマイズすることができます。 – thefourtheye

関連する問題