【问题标题】:Generate random binary strings of length 32生成长度为 32 的随机二进制字符串
【发布时间】:2021-12-25 03:51:30
【问题描述】:

我想生成 500 个长度为 32 的随机二进制字符串(即,从 00000...01111...1,其中每个字符串的长度为 32)。我想知道如何有效地或以 Python 方式做到这一点。

现在,我在01 之间随机选择32 次,然后将结果附加到一个字符串中。这似乎非常低效而且不是pythonic。有没有一些我可以使用的库函数?

【问题讨论】:

  • 只需生成 32 位随机数并将其转换为二进制字符串...

标签: python


【解决方案1】:
import random

rnd_32bit = f'{random.getrandbits(32):=032b}'

【讨论】:

  • 简单和pythonic。
【解决方案2】:

从 python 3.9 开始,你可以这样做:

from random import randbytes

def rand_32bit_string(byte_count):
    return "{0:b}".format(int.from_bytes(randbytes(4), "big"))

【讨论】:

    【解决方案3】:

    最简单的方法可能是使用secrets 库(python 3.6 的python 标准库的一部分)及其token_bytes 函数。

    import secrets
    
    s = secrets.token_bytes(nbytes=4)
    

    This question 有多种解决方案可以将bytes 转换为str 位数字。您可以执行以下操作:

    s = bin(int(secrets.token_hex(nbytes=4), 16))[2:].rjust(32, '0')
    

    将其放入 for 循环中即可完成!


    在 python 3.9 中,您还可以选择random.randbytes,例如random.randbytes(4),其行为类似(尽管 secrets 将使用加密安全的随机源,如果这对您很重要的话)。

    【讨论】:

    • 为什么要获得 32 个 bytes 才能获得 32 个 bits
    • 更改nbytes=4,您可能会遇到一些问题,但是您仍然需要解决问题的关键,将其转换为二进制字符串
    • 我看错了那部分,谢谢。我会更新的!
    • 更接近了,但是我不认为 bin 输出 32 位,它可能需要用零填充才能一直是 32 位...
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2015-09-13
    • 1970-01-01
    • 2017-11-12
    相关资源
    最近更新 更多