在python中将位映射到字符的好方法?

2024-07-01 06:43:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

现在要生成ab的8个模式,我们创建8位模式:

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

如何将位映射到字符“a”和“b”,以接收如下输出:

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

我在找一个高效的单班轮。我使用翻译或格式的方法在我看来有点低效:

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

Tags: the方法importmapstring格式模式range
3条回答

除了可读性,这并不是一个很大的改进,但我认为新样式的格式可能更适合这里:

>>> '{:0<3b}'.format(1).translate(string.maketrans('01', 'ab'))
'baa'

我想你在找^{}

>>> from itertools import product
>>> [''.join(i) for i in product('ABC',repeat=3)]
['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 'B
AC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 'CBB'
, 'CBC', 'CCA', 'CCB', 'CCC']

一个使用map的线性函数。当然不是绩效的提升,我想:

>>> the_list = (0,1,16,255,32768)
>>> the_map = { '1':'a','0':'b'}
>>> list(''.join(map(the_map.get, (bit for bit in bin(num)[2:].zfill(3)))) for num in the_list)
['bbb', 'bba', 'abbbb', 'aaaaaaaa', 'abbbbbbbbbbbbbbb']

我按你的例子中的3位数填写。请注意,您的问题将“1”映射到“a”,将“0”映射到“b”,而您的示例正好相反。你知道吗

相关问题 更多 >

    热门问题