2009-12-12 22 views
0

我使用這行代碼來生成一個整數的隨機列表:Python的隨機和INT串問題

random.sample(range(2000), 100) 

有了這個代碼,我知道我不會有雙重價值與我的結果。他們可能是更快的方式來實現相同的結果?

現在我實際上必須將這些int轉換爲字符串。什麼是最快的方法來做到這一點?

感謝

回答

1

random.sample從列表中選擇沒有整數更換。如果你試圖避免重複,那麼你正在做的是正確的方法。你的號碼可以變得更大嗎?您需要使用Python 3或Python 2中的xrange來避免生成該範圍中的整個整數列表。

(感謝JF塞巴斯蒂安用於指出random.sample沒有,如果你使用的xrange產生的所有整數)。

如果你想使您可以使用randrange而不是重複:

randomInts = [random.randrange(2000) for _ in range(100)] 

要轉換爲字符串:

randomStrings = [str(x) for x in randomInts] 
+0

-1:隨機' .sample()'不會生成en輪胎清單從中抽樣。 'random.sample(xrange(10 ** 9),100)'和'random.sample(xrange(10 ** 3),100)'採取相同的時間。 – jfs 2009-12-12 16:57:51

+0

好的,謝謝你告訴我!我沒有意識到它可以通過生成器進行優化,而不是實際生成元素。這讓我想知道它是如何知道它將在未實際生成它們的情況下獲得的數字。發電機可以返回任何他們想要的。它必須是一些特別處理xrange的特殊處理? – 2009-12-12 17:08:03

+1

最好只看'random.sample'的來源,但我認爲它只使用'__len__'和'__getitem__'方法。 – jfs 2009-12-12 17:22:35

0
import random 
r = random.sample(range(2000), 100) 
# One way to convert them to strings: 
s = [str(x) for x in r] 
0

如果你會產生大量和很多隨機數列表,你可以預先生成字符串來加速查找,就像這樣。

stringcache = dict((val, str(val)) for val in range(2000)) 

while some_condition: 
    r_strings = map(stringcache.get, random.sample(range(2000), 100)) 
2

使用xrange而不是range

lst = random.sample(xrange(10**9), 100) 

要轉換爲字符串列表:

strings = map(str, lst) 

作爲一個字符串:

s = ''.join(strings) 
+1

xrange在Python 3.0中不存在。 「NameError:name'xrange'未定義」 – 2009-12-12 17:40:02

+3

@Mark:*標記爲'python'的代碼中的大部分*在Python 3.0上不起作用(由於'print'語句 - >'print()'函數的微小差別, 'xrange' - >'range'。除非*明確指出Python 3.x的要求,否則所有的代碼應該被認爲是Python 2.x – jfs 2009-12-12 17:57:15