2

the_map = { 1:'a',0:'b'}

aとの 8 つのパターンを生成するために、8つのbビット パターンを作成します。

>>> range(8)
[0, 1, 2, 3, 4, 5, 6, 7]
# 001,010,011....111

ビットを文字 'a' および 'b' にマップして、次のような出力を受け取る方法:

['aaa','aab','aba'.......'bbb']

効率的なワンライナーを探しています。translate または format を使用する私のアプローチは、私には少し非効率的です。

>>> import string
>>> [bin(x)[2:].zfill(3).translate(string.maketrans('01','ab')) for x in xrange(8)]
['aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bba', 'bbb']
4

4 に答える 4

2

読みやすさ以外に大きな改善はありませんが、新しいスタイルの書式設定がここにより適していると思います。

>>> '{:0<3b}'.format(1).translate(string.maketrans('01', 'ab'))
'baa'
于 2013-06-12T07:32:30.010 に答える
0

それは創造性の問題です;)私は別の答えを投稿します-まったく異なるアプローチです。

8 ビット パターンを使用しているため、次のようになります。

# Build our own translation table for all the 8-bit values (unsigned)
>>> import string
>>> ttable = string.maketrans('01','ab')
>>> the_map = {}
>>> for i in range(256):
...     the_map[i] = bin(i)[2:].zfill(3).translate(ttable)
... 

# Do the actual translation of an arbitrary list
>>> the_list = (0,1,16,255)
>>> map(the_map.get, the_list)
['aaa', 'aab', 'baaaa', 'bbbbbbbb']
于 2013-06-12T07:49:39.513 に答える