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']
私は、私はコードがこれらの順列を作成したいのですが、単一の文字(結果の順序は重要ではありません)からラムダにはそれほど大したものではなく、もっと良い解決策がある場所であると思われます。
希望の結果に最もエレガントな/ピジョンの方法を見つけるのを手助けできますか?
うーん、私はそれを好きを取得するために、異なる
repeat
値でitertools.product
を使用することができます。 pop + [''製品のアイテムの結合(pop、repeat = 2)] –@JayMarm私が提供した答えは一般的なものです。必要に応じてカスタマイズすることができます。 – thefourtheye