How to randomly select values for a list?
我用的是python 2.7
明确地说,我不想随机化列表中的项目。我想让它,这样某些弦就有可能根本不出现。例如:
1 2 3 4 5 6 | r ="red" b ="blue" y ="yellow" rc = random colour myColours = [rc,rc,rc] print myColours |
显然上面的代码不起作用,但我不确定如何继续。如果我能改变选择某个字符串的可能性,比如50%的几率是红色,30%的几率是蓝色,20%的几率是黄色,这也会有所帮助。
您可以使用
1 2 3 4 5 6 | 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'] |
要确认这是有效的,使用大小为30000而不是3的结果,并让大数定律来做它的事情。
1 2 3 4 5 6 7 8 9 10 | 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} |
虽然这对使用python 2.7的操作没有帮助,但是对于使用python 3.6的操作来说,
Return a k sized list of elements chosen from the population with replacement.
鉴于
1 2 3 4 5 6 7 8 9 10 | import random r ="red" b ="blue" y ="yellow" iterable = r, b, y size = 3 wts = [.5, .3, .2] |
代码
1 2 3 4 5 | random.choices(iterable, k=size) # ['red', 'yellow', 'yellow'] random.choices(iterable, weights=wts, k=size) # ['red', 'red', 'red'] |