如果你的清单不是很庞大,如果内存不是问题,你可以使用这个简单的方法。
要获得n
元素从a
,b
和c
,你可以在三个列表拼接在一起,并选择从结果列表中随机元素与random.choice
:
import random
n = 50
a = ['a'] * 170
b = ['b'] * 120
c = ['c'] * 40
big_list = a + b + c
random_elements = [random.choice(big_list) for i in range(n)]
# ['a', 'c', 'a', 'a', 'a', 'b', 'a', 'c', 'b', 'a', 'c', 'a',
# 'a', 'a', 'a', 'b', 'b', 'a', 'a', 'a', 'a', 'a', 'c', 'a',
# 'c', 'a', 'b', 'a', 'a', 'c', 'a', 'b', 'a', 'c', 'b', 'a',
# 'a', 'b', 'a', 'b', 'a', 'a', 'c', 'a', 'c', 'a', 'b', 'c',
# 'b', 'b']
对于每一个元素,你会得到一个len(a)/len(a + b + c)
从a
获得元素的概率。
尽管您可能会多次获得相同的元素。如果你不希望发生这种情况,你可以使用random.shuffle
。
你不能强迫样本类似人口,它是随机的。 –
你能澄清一下吗?你有三个列表,或者你想将一个样本随机分成三个列表? – roganjosh
例如['numpy.random.choice'](https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.random.choice.html)允许您传递概率参数(a可能性列表),但我很难理解你想要做什么,所以我不知道它是否合适。 – roganjosh