【问题标题】:How to randomly select values for a list?如何随机选择列表的值?
【发布时间】:2017-11-16 04:04:35
【问题描述】:

我使用的是 Python 2.7

明确地说,我不想随机化列表中的项目。我想做到这一点,这样某些字符串就可能根本不出现。例如:

    r = "red"
    b = "blue"
    y = "yellow"
    rc = random colour
    myColours = [rc,rc,rc]
    print myColours

显然上面的代码不起作用,但我不确定如何继续。如果我可以更改选择某个字符串的可能性也会有所帮助,例如 50% 的红色几率、30% 的蓝色几率和 20% 的黄色几率。

【问题讨论】:

标签: python python-2.7 random


【解决方案1】:

您可以使用numpy.random.choicep 参数允许您指定与每个条目关联的概率。

import numpy as np

r, b, y = 'red', 'blue', 'yellow'
my_colours = np.random.choice(a=[r, b, y], size=3, p=[.5, .3, .2])
print(my_colours) . # my_colours.tolist() if you want list output
# ['yellow' 'red' 'red']

要确认这是有效的,请使用大小为 30,000 而不是 3 的结果,并让大数定律发挥作用。

from collections import Counter

test = np.random.choice(a=[r, b, y], size=30000, p=[.5, .3, .2])
counts = Counter(test)

# Relative occurences:
dict(zip(counts.keys(), [count/30000 for count in counts.values()]))
{'blue': 0.30483333333333335,
 'red': 0.5000333333333333,
 'yellow': 0.19513333333333333}

【讨论】:

    【解决方案2】:

    虽然它不会帮助使用 Python 2.7 的 OP,但对于那些使用 Python 3.6 的人来说,random.choices 很简单,包含权重并且是标准库的一部分。

    返回一个 k 大小的元素列表,该列表是从具有替换的总体中选择的。

    给定

    import random
    
    
    r = "red"
    b = "blue"
    y = "yellow"
    
    iterable = r, b, y
    size = 3
    wts = [.5, .3, .2]
    

    代码

    random.choices(iterable, k=size)
    # ['red', 'yellow', 'yellow']
    
    random.choices(iterable, weights=wts, k=size)
    # ['red', 'red', 'red']
    

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多