如何生成随机数,同时避免已使用的数字

时间:2011-08-11 22:11:38

标签: python random numbers generator

如何生成随机数,但数字应避免已使用的数字。 我有一个包含数千组数字的TXT文件,我需要生成一系列随机数,同时避免这些。

IE,TXT - 0102030405
我的随机数需要避免这个数字。

在旁注中,我如何将TXT 10位数字分成5位,两位数字? 那么我怎样才能根据它生成随机数。

4 个答案:

答案 0 :(得分:1)

您可以将之前找到的所有随机数加载到字典中,然后检查字典中是否有new_random,以及是否尝试使用新的随机数。

对于第二方,请说您的十位数字存储在变量ten_digits中。

ten_digits = '1234567890'

您可以通过

将其分为5个两位数字
[x + y for x, y in zip(ten_digits[::2], ten_digits[1::2]
>>> ['12', '34', '56', '78', '90']

答案 1 :(得分:1)

如果你需要维护文件(我认为你这样做,为了添加新的数字),我建议你“忘记”使用纯文本文件并使用SQLite或任何其他备份的嵌入式数据库在文件中,因为您可能不想在内存中加载所有数字。

您希望从SQLite获得的“功能”(或更好的数据结构)是B树,因此您可以快速检索数字。我这样说,因为你也可以尝试找到一个实现B-Tree的库,然后你就不需要SQLite了。

答案 2 :(得分:0)

您是否将这些数字用作ID?您应该考虑使用哈希表。

http://en.wikipedia.org/wiki/Hash_table

我对Python并不十分熟悉,但我确信有一个子字符串函数可以给它(作为参数)一个索引来启动子字符串和要复制的字符数。

答案 3 :(得分:0)

如果您的列表相对较小,可以将其加载到set并检查:

random_number not in number_set

要分割您可以使用切片的数字:

s='0102030405'
n=2
result = [s[i:i+n] for i in range(0, len(s), n)]