2012-10-06 64 views
-5

可能重複:
Random sampling a list of genes如何生成唯一的隨機列表

我想從19.000基因宇宙創造的1652個基因1000名隨機列表。由於宇宙不是那麼大,我決定取而代之。唯一的條件是列表可以包含它們之間的相似基因(由於替換),但每個列表不能包含一個以上的基因。所以它在單個列表中將是唯一的。對此有何建議?

例:宇宙=字母[1:26]

希望的輸出:

[[1]] [[2]] [[3]] [[...]] 
    a  b  f 
    b  c  a 
    c  d  b 
    f  z  j 
    h  j  o 

我想避免這樣的情況:

[[1]] [[...]] 
    a 
    a 
    b 
    c 
    c 

由於宇宙是沒有這麼大,我不能集替換= f。如果我設置REPLACE = T,出現在列表中複製的元素......這就是我試圖避免我的分析。

在此先感謝

E.

+0

我認爲''19000'',''**'不是**是小數點? –

+0

[random.sample(http://docs.python.org/library/random.html#random.sample)應該做的伎倆。 –

+5

問[相同的問題(http://stackoverflow.com/questions/12754724/random-sampling-a-list-of-genes)你不顯示你在臨時做了什麼以前那樣是不會激勵他人來幫你! – A5C1D2H2I1M1N2O1R2T1

回答

4

這段代碼從宇宙中抽取5個樣本,不需要替換。我認爲這是你想要的:

Universe = letters[1:26] 
replicate(5, sample(Universe, 10, replace = FALSE)) 

    [,1] [,2] [,3] [,4] [,5] 
[1,] "j" "l" "k" "c" "j" 
[2,] "g" "i" "c" "t" "g" 
[3,] "z" "u" "m" "u" "e" 
[4,] "a" "b" "t" "e" "q" 
[5,] "q" "d" "j" "k" "m" 
[6,] "r" "a" "l" "l" "x" 
[7,] "e" "g" "r" "i" "f" 
[8,] "l" "w" "o" "g" "u" 
[9,] "b" "y" "b" "x" "c" 
[10,] "u" "j" "x" "a" "b" 
+0

嗨保羅!謝謝你,但是如果我設置更換= F,因爲我嘗試過一下,我將永遠無法從19.000基因開始產生1652個基因名單.... – Elb

+0

我從你的問題引用:'唯一的條件是,名單可以包含它們之間的類似基因(由於替換),但是每個列表不能包含多於一次的基因。此代碼滿足此要求。 –

+0

@Elb,也許你正在解決問題。在列表中不應該有替換,但是您可以從每個新列表的整個Universe重新開始。 –

3

不知道你的意思是 「REPLACE = T」,但random.sample使用數字作爲宇宙

可以做你想做的

>>> import random 
>>> import string 
>>> universe = string.ascii_lowercase 
>>> random.sample(universe, 5) 
['z', 'n', 'p', 'u', 's'] 

>>> universe = range(19000) 
>>> result = [random.sample(universe, 1652) for x in range(1000)] 

需要不到一第二運行。如果你想避免重複(不太可能在第一個地方),你可以使用一套

>>> result = set() 
>>> while len(result) < 1000: 
...  result.add(tuple(random.sample(universe, 1652))) 
+0

'「REPLACE = T」'是R中樣本函數的一個參數,儘管它們應該是小寫的。 'replace = TRUE'表示用替換畫圖,'FALSE'表示畫圖不用替換。 'random.sample'在沒有替換的情況下繪製。 –