【问题标题】:How to find position of elements in a game (list)?如何在游戏(列表)中找到元素的位置?
【发布时间】:2020-04-15 05:26:30
【问题描述】:

在这个游戏中,'o'表示的位置(0, 0)只有一个元素。其余的都被占用了。编写一个函数empty(game),它接受一个游戏并给出所有空格的位置列表。每个位置由(i,j) 指定。 例如,

game =  [['o', 'x', 'x'],
         ['x', 'x', 'x'],
         ['x', 'x', 'x']]

empty(game) 给出 [(0,0)]


def empty_spaces(game):
    result = [0]
    num_of_rows = len(game)
    num_of_columns = len(game[0])
    for i in range(num_of_columns):
        for j in range(num_of_rows):
            if not "o":
                result += i[j]
    return result

但是,我得到的结果是[0]。非常感谢您的帮助!

【问题讨论】:

  • 提示:仔细查看if not 'o': 的值,或者更具体地说,查看not 'o' 的值。
  • if not "'o" 是否更改为 if "o" ?
  • 不。 if "o" 无论如何都会是真的。
  • 您可以检查board[j][i] 中的值,稍后您必须添加(i,j)。并在星创建空列表 - result = [] 。顺便说一句:请记住,您使用坐标[row][column],而不是[column][row]

标签: python python-3.x list search


【解决方案1】:

这样的事情应该可以工作:

game =  [['x', 'x', 'o'],
         ['x', 'o', 'x'],
         ['x', 'x', 'o']]

def empty_spaces(board):
    result = []

    for r_index, row in enumerate(board):
        for c_index, column in enumerate(row):
            if 'o' in column:
                result.append((r_index, c_index))

    return result

print(empty_spaces)

>>> [(0, 2), (1, 1), (2, 2)]

【讨论】:

    【解决方案2】:

    您已经遍历game 列表并查看是否找到'o',如果有命中则将该元素坐标附加到result。我想指出的错误是if not "o" 总是正确的,result=[0] 你不想这样做。而是简单地写 result= []result= list()result+= i[j] i 在您的代码中是不可迭代的,它是一个整数。由于我们检查是否每个元素都等于"o",因此时间复杂度为O(rows*columns)

    game =  [['o', 'o', 'x'],
             ['x', 'x', 'x'],
             ['x', 'x', 'o']]
    result=[]
    for i in range(len(game)):
        for j in range(len(game[i])):
            if game[i][j] == 'o':
                result.append((i,j))
    print(result)
    
    >>> [(0, 0), (0, 1), (2, 2)]
    

    【讨论】:

      【解决方案3】:

      问题在于声明 if not 'o':

      对于我们人类来说,很明显,在程序的上下文中,我们想要检查索引 (i, j) 处的元素是否是字符串 'o'

      不幸的是,Python 的性质和局限性意味着我们必须明确和具体:if game[i][j] == 'o':

      这个特殊的错误非常烦人,因为尽管缺少部分表达式,但代码运行得非常好,因为有一种叫做真实性的东西。真实性(及其对应物,虚假性)是一种想法,即不是布尔值的东西可以转换为/评估为一个。在 Python 字符串的情况下,空字符串是虚假的(它们评估为 False),非空字符串是真实的(你明白了)。因此,您代码中的 if 语句的评估方式如下:if not 'o': —> if not True: —> if False:。如您所知,该 if 语句的内容将永远被执行。


      以下是我将如何重写您的代码:

      game =  [['o', 'x', 'x'],
               ['x', 'x', 'x'],
               ['x', 'o', 'x']]
      
      
      def empty_indexes(board):
          index_list = []
          for row_idx, row in enumerate(board):
              for col_idx, elem in enumerate(row):
                  if elem == 'o': 
                      index_list.append((row_idx, col_idx))
          return index_list
      

      enumerate() 是一个简单且非常有用的函数,它返回由输入中的一个元素和一个每次递增的计数器组成的对。当在列表上使用时,就像上面的代码一样,它返回对应于 (index, element) 对的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多