如何从以前的值生成中获取不同的十六进制值?

时间:2018-01-02 10:19:40

标签: python loops random hex

import os,binascii
print binascii.b2a_hex(os.urandom(1))

我正在使用os.urandom创建一个十六进制值,如上所示,我需要生成15个不同的值。

我得到了生成值,但我不知道如何使它成为所有值与之前生成的值不同。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案可能是生成所有值的列表shuffle,然后像这样迭代它们:

import binascii
import random

byte_list = [i for i in range(256)]
random.shuffle(byte_list)
for byte in byte_list:
    print binascii.b2a_hex(chr(byte))

答案 1 :(得分:0)

如果您需要保证唯一性,可以继续填充set,直到它的长度正确为止。集不允许重复值。如果您需要它作为列表,您可以使用list()轻松转换它。

def get_random(n):
    out = set()
    while len(out) < n:
        out.add(binascii.b2a_hex(os.urandom(1)))
    return list(out)

print get_random(15)

当然对于这个,你需要注意有足够的随机值来填充n长度列表,否则你最终会陷入无休止的循环中。