将一个二进制数分成五位数的一组

2024-05-14 18:17:01 发布

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

在python中,有没有什么巧妙的技巧可以将二进制数分成五位数的组?在

'0000100011011101101110100010111'=>;['00010','00110','10111'。。。]在

编辑: 我想写一个密码/编码器,以便生成“易于通过电话读取”的令牌。标准base32编码有以下缺点:

  • 可能会产生意外的f*单词
  • 使用易混淆的字符,如“I”、“L”、“O”(可能与0和1混淆)
  • 容易猜测的序列(“AAAA”,“AAAB”,…)

感谢大家,我能够用20行python完成自己的任务。我的编码器去掉了“I”、“L”、“O”和“U”,结果序列很难猜测。在


Tags: gt编辑密码编码技巧标准二进制序列
3条回答
>>> [''.join(each) for each in zip(*[iter(s)]*5)]
['00010', '10001', '10111', '01101', '11010', '00101']

或者:

^{pr2}$

[编辑]

这个问题是格雷格·休吉尔提出的,那两个尾随的位子怎么办?以下是一些可能性:

>>> from itertools import izip_longest
>>>
>>> map(''.join, izip_longest(*[iter(s)]*5, fillvalue=''))
['00010', '10001', '10111', '01101', '11010', '00101', '11']
>>>
>>> map(''.join, izip_longest(*[iter(s)]*5, fillvalue=' '))
['00010', '10001', '10111', '01101', '11010', '00101', '11   ']
>>>
>>> map(''.join, izip_longest(*[iter(s)]*5, fillvalue='0'))
['00010', '10001', '10111', '01101', '11010', '00101', '11000']
>>> a='00010100011011101101110100010111'
>>> [a[i:i+5] for i in range(0, len(a), 5)]
['00010', '10001', '10111', '01101', '11010', '00101', '11']

另一种分组ITerable的方法,来自itertools示例:

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

相关问题 更多 >

    热门问题