2016-10-11 92 views
3

我有一个列表列表,其中每个列表都与分数/权重相关联。我想通过从第一个列表中随机选择一个列表来创建一个新列表,这样分数较高的列表就会更频繁地出现。下面的行工作正常,当​​只是一个正常的名单。但我想要列出一个列表。随机选择Python列表中的列表,取决于权重

population = [['a','b'],['b','a'],['c','b']] 
list_of_prob = [0.2, 0.2, 0.6] 

population = np.random.choice(population, 10, replace=True, p=list_of_prob) 

这会给输出ValueError: a must be 1-dimensional

+0

@Chicony你应该在问题中提到,这是没有必要的应该是'numpy' –

回答

7

不是传递的实际名单,通过与索引到列表清单。

np.random.choice已经允许这一点,如果你传递一个int n那么它的工作原理,如果你通过np.arange(n)

所以

choice_indices = np.random.choice(len(population), 10, replace=True, p=list_of_prob) 
choices = [population[i] for i in choice_indices] 
+0

'类型错误:只有一个元素整数数组可以被转换成一个index' – roganjosh

+0

@roganjosh使用'范围(len(人口))' –

+2

这实际上就像一个魅力,就像你选择= [choice_index]中的[population [i]],而不是'choice = population [choice_index]'作为'choice_index'是一个'清单' –