2013-05-10 40 views
4

良好的傍晚!簡單的問題,我希望!從列表中刪除的隨機樣本

我有數據,就像一個列表:

L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)] 

我需要隨機抽樣大小爲2,所以我想用:

import random 
t1 = random.sample(set(L),2) 

現在T1是隨機拉列表值,但我想從我們最初的名單中刪除從我們的初始名單中隨機抽取的那些。我可以做一個線性循環,但對於我想要做的更大的列表的任務。所以運行時間將永遠消失!

有關如何去解決這個問題的任何建議?

回答

6
t1 = [L.pop(random.randrange(len(L))) for _ in xrange(2)] 

不改變L中其餘元素的順序。

3

一個選項是將列表刷新,然後彈出前兩個元素。

import random 
L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)] 
random.shuffle(L) 
t1 = L[0:2] 
+0

-1'random.shuffle'是一個in-place函數,因此返回'None'。這個答案給出:'TypeError:'NoneType'對象沒有屬性'__getitem __'' – jamylak 2013-05-10 08:09:30

+0

@jamylak對不起,我糾正了錯誤。感謝您的反饋 – jvallver 2013-05-10 08:13:07