【问题标题】:Finding ALL indexes of elements in nested List [closed]查找嵌套列表中元素的所有索引 [关闭]
【发布时间】:2020-04-14 05:35:18
【问题描述】:

井字游戏,其中棋盘表示为 [['x', 'x', 'x'], [' ', ' ', ' '], [' ', ' ', ' ']]

我们想找出船上所有的空方格。棋盘上的空方格位置将作为(行、列)元组返回。

完成函数empty_squares(board),它返回元组列表,其中每个元组是空方格的(行、列)。

这是我目前所拥有的,它返回所有正方形的元组,但我只想要空的。

def empty_squares(board):
    check = ' '
    target_cell_list = []
    for i in range(len(board)):
        for j in range(len(board[i])):
            target_cell_list.append((i, j))
    return target_cell_list

【问题讨论】:

  • 您可以尝试使用if 语句来环绕您的.append
  • 你有什么尝试实际上只找到空字段?

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


【解决方案1】:

您可以稍微改变您的方法,使其更“pythonic”。避免嵌套的 for 循环,您可以使用带有内置 enumerate 语句的列表理解。所以empty_sqares 可以是这样的:

def empty_sqares(board):
    return [(row_idx, col_idx) for row_idx, row in enumerate(board)
            for col_idx, item in enumerate(row) if item == ' ']

最重要的是要弄清楚enumerate 做了什么。简而言之,它遍历iterable(例如列表、列表列表、对象列表等),并为每个元素返回一个元组,其中包含一个计数(从默认为 0 的开始)和通过迭代迭代获得的值。来源:https://docs.python.org/3/library/functions.html#enumerate

那么代码中发生了什么:

  • for row_idx, row in enumerate(board) 遍历 board 中的行。因为board(行)的项目是列表,所以enumerate(board)的连续结果是行索引(row_idx)和行内容(row是字符串列表)。例如,enumerate(board) 的第一个“迭代”结果将是:row_idx = 0row = ['x', 'x', 'x']
  • for col_idx, item in enumerate(row) 遍历row,选择row 的每个元素并将其分配给item。例如,enumerate(row) 的第一个“迭代”结果将是:col_idx = 0item = 'x'
  • if item == ' ' 执行检查选择的字符(在您的情况下,您有两个选项'x'' 或 ' ')是否等于单个空格...
  • ...如果检查为真,则形成元组(row_idx, col_idx)
  • 整个内容都包含在方括号[..] 中,以创建元组的列表。但请记住,只有满足上述条件时,才会将新元组附加到结果中。

【讨论】:

    【解决方案2】:

    添加 if 语句

    def empty_squares(board):
        check = ' '
        target_cell_list = []
        for i in range(len(board)):
            for j in range(len(board[i])):
                if board[i][j] == " ":
                    target_cell_list.append((i, j))
        return target_cell_list
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 2016-04-19
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多