【问题标题】:How do I check to see if a nested list is in another list, regardless of order无论顺序如何,如何检查嵌套列表是否在另一个列表中
【发布时间】:2021-03-15 14:45:27
【问题描述】:

我正在 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 中(如果可能,无论顺序如何)?

【问题讨论】:

  • any(all(position in player1 for position in win) for win in wins),检查any 是否存在all 动作(位置)在player1 中的获胜条件。另请参阅this 帖子以检查子列表。

标签: python-3.x list nested-lists tic-tac-toe


【解决方案1】:

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

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

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

any([set(w).issubset(set(player1)) for w in wins])

【讨论】:

    【解决方案2】:

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

    例如:

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

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 1970-01-01
      • 2019-08-11
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      相关资源
      最近更新 更多