2017-01-07 51 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)'。 –