2016-10-20 30 views
2

假設我有一個名爲masterlist的200個正數,唯一隨機整數的列表。Python:如何創建一個列表隨着長度增加,由隨機數組成的列表?

我想要生成一個名爲container的10個列表,以便:l1有2個來自masterlist的隨機數,排除重複; l2有4個元素,l3有6個元素,等等。

我知道我可以這樣創建我container名單:

comb=[[] for i in range(10)] 

,我也可以選擇使用random.choice()列表中的隨機值。

什麼是嵌套這10個列表的填充過程的最佳Pythonic方法,以便創建一個列表,追加正確數量的值以檢查沒有重複,然後繼續下一步?

編輯

這是我的嘗試:

comb=[[] for i in range(10)] 
for j in range(1,11): 
    for k in range(0,2*j): 
     comb[j][k].append(random.choice(masterlist)) 

有什麼不對呢?

+0

多少個整數應該包含每個列表?兩個不同的名單可以有兩個相同的數字? – MMF

+0

'l1'有2個值,'l2'有4個值,'l3'有6個,一路到'l10'有20個。是的,兩個不同的列表可以有兩個相同的數字。重要的是,在每個清單中你都沒有重複。 – FaCoffee

+0

Can 2可以包含兩個子列表中的數字嗎? –

回答

4

這應該做的伎倆:

import random 

masterlist = [i for i in range(200)] # For example 

container = [ 
    random.sample(masterlist, l) 
    for l in range(2, 21, 2) 
] 

容器是由一個列表理解的,使用range()通話設置變量l 2,4,6 ... 18,20。在理解的每個「循環」中,內置的random.sample()調用都會​​執行您之後的無需替換的抽樣。

+0

那麼,花哨的東西,但我得到一個錯誤:'TypeError:random_sample()至多1位置參數(2給出)'。順便說一句,謝謝你解釋! – FaCoffee

+1

適用於python 2.7。你使用的是什麼版本的Python?你可以發佈完整的追溯? –

+3

另外,在哪裏定義了'random_sample'方法?這與我正在使用的'random.sample'方法不一樣。 –

相關問題