2011-08-11 148 views
1

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

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

请注意,如何将TXT 10位数字分成5个两位数字? 那么我怎么能生成基于此的随机数字。

+0

你是什么意思根据5位数字生成一个随机数?你的意思是避免这些5位数字? – arunkumar

+0

在旁注中,txt文档中的所有数字均为CSV。 他们看起来像这样:“0102030405”1 “0202030405”4 – mike

+0

是的,TXT号码作为一个整体,需要避免。 – mike

回答

1

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

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

ten_digits = '1234567890' 

,你可以通过你使用数字作为标识做

[x + y for x, y in zip(ten_digits[::2], ten_digits[1::2] 
>>> ['12', '34', '56', '78', '90'] 
+3

哟山姆,下车堆栈溢出。你应该在工作。 – Jim

+0

嗯, 可以说我们有[10,12,21,32,45] 如果随机数发生器使:10 12 20 20 20 会通过字典检查失败,因为10和12? – mike

+0

对于TXT数字,我知道第一个是X和第三个是Y ['X',??。'Y',??,??] 所以我的随机数字只需要检查其他数字3个地方。 我想我可以单独做... – mike

0

打破这一成5个两位数字?你应该看看使用哈希表。

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

我并不十分熟悉Python,但我敢肯定有一个子功能,您可以把它(作为参数)启动子和要复制的字符数的指标。

1

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

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

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