2011-08-11 150 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)]