2014-04-30 78 views
0

我想創建一個百萬無序列表,xrange(1, 1000000)例如給我一個有序列表。我認爲我需要像xrange這樣的東西,但是以無序的方式生成它。我想我可以通過圍繞random.randint和一些手動檢查手動生成一個列表,以保證列表中的數字的唯一性,但我認爲這將是耗時的。有任何想法嗎?Python中的無序列表生成

+0

這可以很容易地與'shuffle'解決,但是如果你不想在內存中存儲整個洗牌陣列並使用隨機就地迭代器,事情會變得棘手。 –

+0

@rr:如果你想確保唯一性,我不確定你可以避免不將數組存儲在內存中。 – jmetz

+0

@jmetz我對此也很感興趣。我添加了評論,以便OP知道這個限制,因爲他明確地使用了'xrange',並且顯然關心性能。 –

回答

2
import random 
L = range(1, 1000000) 
random.shuffle(L) # shuffles in-place 

上Python3,你將需要使用

L = list(range(1, 1000000)) 
random.shuffle(L) # shuffles in-place 
2

使用來自與NumPy的random模塊。具體np.random.permutation

>>> import numpy as np 
>>> np.random.permutation(5) 
array([2, 1, 0, 3, 4]) 
0

如果您使用numpy您可以使用permutation

numpy.random.permutation(10) 
>> array([1, 7, 6, 0, 5, 9, 2, 3, 8, 4])