如何按行比较两个列表(第一行与第一行,第二行与第二行同样)?

时间:2018-07-04 04:51:23

标签: python

我有三个索引值列表

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]

有人可以帮我吗...

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的解决方案。