2017-01-07 53 views
2

我正在寫排名算法,我想添加隨機因子。如何建立加權隨機列表?

我生成的10個條目,其中每個項目具有從1到10的值的列表:

l = [random.randint(1,10) for num in range(1, 11)] 

我運行該代碼約400倍,並存儲在DB中的大列表。

我想增加它的概率,所以70%的時間裏,前5個項目產生1到5之間的隨機數,最後5個項目產生5到10個。

30%的時間它保持隨機沒有任何可能性(正常模式)。

我怎樣才能達到這個使用Python和它的隨機模塊?

編輯:有的認爲,這可能是this question重複,但它不是,因爲我不希望選擇基於一個probabiltiy項目,而不是我想根據自己的體重來進行分配。

+0

@UrielEli我發佈前檢查這一點,我無法瞭解它如何會幫助我的情況,因爲用戶看起來像他想創建一個函數,根據它們的概率從列表中選擇數字,這不完全是我的情況。 –

回答

3

下將生成隨機通緝名單:

import random 


def next_random_list(): 
    # With 70% probability 
    if random.randint(1, 10) <= 7: 
     # Generate 5 random elements from 1 to 5 
     a = [random.randint(1, 5) for _ in range(5)] 

     # Generate 5 random elements from 5 to 10 
     b = [random.randint(5, 10) for _ in range(5)] 

     # Concatenate them 
     return a + b 
    else: 
     # Return just a random list of 10 numbers from 1 to 10 
     [random.randint(1, 10) for _ in range(10)] 

,你可以調用400次:

lists = [next_random_list() for i in range(400)] 
+0

謝謝,雖然這不包括在原來的問題,我怎麼能確保我永遠不會在列表中獲得相同的數字? –

+1

@AnisSouames看看'random.sample',例如下半場的'random.sample(range(5,10),5)'。 –