无论顺序如何,如何检查嵌套列表是否在另一个列表中

How do I check to see if a nested list is in another list, regardless of order

我正在 python 玩井字游戏。我有一个棋盘,每个方块对应一个数字 (0-8),为了帮助确定获胜条件,我有这个列表:

wins = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8], [0, 4, 8], [2, 4, 6]]

每当其中一位玩家放下一封信时,无论他们把信放在哪里,都会将其放入一个列表中,因此在游戏结束时,他们的一个列表可能如下所示:

player1 = [0, 1, 4, 5, 6]

如何检查其中一个嵌套列表的所有元素是否都在 player1 中(如果可能,不考虑顺序)?

您可以使用 all 函数检查一个列表是否是另一个列表的子集。请参阅文档 here.

例如:

def check_for_win():
    for win in wins:
        if all(x in player1 for x in win):
            return True
    return False

如果你只是想检查任何可能的获胜方格列表是否等同于玩家1的选择方格列表,你可以这样做

any([set(w) == set(player1) for w in wins])

但是,在我看来,检查玩家 1 的移动中是否 包含 任何获胜方格列表更有意义,这意味着不一定 所有 个元素都在 player1 中。你可以通过简单地做

来做到这一点
any([set(w).issubset(set(player1)) for w in wins])