Python 如何逐行比较两个列表(第一行与第一行、第二行与第二行)?

Python 如何逐行比较两个列表(第一行与第一行、第二行与第二行)?,python,Python,我有三个索引值列表 indexval 0 [3, 2, 7, 5] 1 [1] 2 [4, 1, 6, 2] 3 [2,3,1] 然后是值列表 值 0 [1] 1 [0] 2 [3] 3 [2] 我想要的是,indexval应该在每行中随机选择“n”个值。该“n”个值应该引用value列表,这样我就可以得到这样的输出 0 [3] 1 [ ] 2 [1,2,4] 3 [1,2] 有人能帮我解决这个问题吗…给出了两个列表。您可以使用random.sample 这是从总体序列中随机挑选k唯一项目

我有三个索引值列表

indexval

0 [3, 2, 7, 5]
1 [1]
2 [4, 1, 6, 2]
3 [2,3,1]
然后是值列表

0 [1]
1 [0]
2 [3]
3 [2]
我想要的是,
indexval
应该在每行中随机选择“n”个值。该“n”个值应该引用
value
列表,这样我就可以得到这样的输出

0 [3]
1 [ ]
2 [1,2,4]
3 [1,2]
有人能帮我解决这个问题吗…

给出了两个列表。您可以使用
random.sample

这是从
总体
序列
中随机挑选
k
唯一项目(即随机抽样,无统计替换):

要执行随机抽样和替换(即允许使用非唯一项),请使用
random。选择
,请参考dawg的解决方案。

您可以执行以下操作:

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]]
如注释中所述,如果不希望重用列表中的任何值,也可以使用(Python 3.6+),如果希望向列表中的部分添加权重,也可以使用

使用random.sample的示例:

>>> [random.sample(sl, k) for k,sl in zip(vals,LoL)]
[[7], [], [6, 4, 2], [1, 2]]

您的数据看起来不像Python语法,您的问题描述得不够。请更清楚一点。我已经更新了我的问题。反复调用
random.choice
可能会多次得到相同的值(正如您在简明版本中的示例输出中看到的加倍的6)。这是否是提问者想要的还不完全清楚(问题中的示例输出中没有出现这种情况,但这可能只是偶然的机会)。只使用一个调用(每个列表)来
random。sample
不会多次拾取相同的值,因此它可能是一个更好的选择。但是,我确实喜欢使用
zip
>>> [random.sample(sl, k) for k,sl in zip(vals,LoL)]
[[7], [], [6, 4, 2], [1, 2]]