我有三个索引值列表
indexval
0 [3, 2, 7, 5]
1 [1]
2 [4, 1, 6, 2]
3 [2,3,1]
然后值列表
value
0 [1]
1 [0]
2 [3]
3 [2]
我想要的是,indexval
应该在每一行中随机选择“ n”个值。那个“ n”数字应该引用value
列表,这样我就应该得到这样的输出。
0 [3]
1 [ ]
2 [1,2,4]
3 [1,2]
有人可以帮我吗...
答案 0 :(得分:3)
您可以这样做:
import random
LoL=[[3, 2, 7, 5],
[1],
[4, 1, 6, 2],
[2,3,1]]
vals=[1,0,3,2]
for x,sl in zip(vals,LoL):
print [random.choice(sl) for _ in range(x)]
或更简洁地说:
>>> ([[random.choice(sl) for _ in range(x)] for x,sl in zip(vals,LoL)])
[[3], [], [4, 6, 6], [3, 1]]
如注释中所述,如果您不想从列表中重用任何值,也可以使用random.sample;如果您想从列表中的部分添加权重,则可以使用random.choices(Python 3.6+)。清单。
random.sample示例:
>>> [random.sample(sl, k) for k,sl in zip(vals,LoL)]
[[7], [], [6, 4, 2], [1, 2]]
答案 1 :(得分:1)
给出两个列表。您可以使用random.sample
。
这将从k
序列中随机抽取population
个唯一项目 (即随机抽样,无需替换统计信息。):
import random
indexval = [[3, 2, 7, 5], [1], [4, 1, 6, 2], [2, 3, 1]]
value = [1, 0, 3, 2]
for i in range(len(indexval)):
print(random.sample(population = indexval[i], k = value[i]))
[2]
[]
[1, 6, 4]
[1, 2]
要使用替换进行随机抽样(即允许使用非唯一项目),请使用random.choices
,请参考dawg的解决方案。