列表列表中的随机样本

Random sample from list of lists

在python中,我有一个列表列表,x,像这样:[[1, 2, 3],[4, 5, 6], [7, 8, 9]]

我还有另一个列表,y,就像这样[1, 2, 3, 4, 5, 6, 7, 8, 9]

我需要从 y 中随机获取 2 个不在 x 列表中的项目,这样我就可以在 x 中切换它们,目标是喜欢 [[1, 2, 9], [4, 5, 6], [7, 8, 3]]。我目前的方法如下:

done = False
while not done:
    switchers = random.sample(y, 2)
    if indexInCourse(x, switchers[0]) != indexInCourse(course, switchers[1]):
        done = True

indexInCourse 是一个 returns 的函数,它列出了一个项目在列表列表中,所以对于 (x, 1) 它将 return 0.目标是 switchers 是 2 个不同的数字,它们在整个不同的列表中,所以像 [1, 9][4, 7]。我当前的方法有效,但对于我浏览的大量列表来说速度非常慢。有谁知道更 pythonic 的方法来做到这一点?

为什么不先从 x 中随机选择两个不同的列表,然后 然后 在它们之间交换随机选择的两个元素?

lists = random.sample(x, 2)
# now we swap two random elements between lists[0], lists[1]