Python 检查嵌套列表中是否存在位置

Python 检查嵌套列表中是否存在位置,python,nested-lists,Python,Nested Lists,我正在尝试解决一个Python编码问题。给定一个仅包含1和0的数组,我必须编写一个程序,按照以下规则返回数组: 每个1必须替换为9 每个0必须替换为其周围(上方、下方、左侧、右侧)的1数量 我的棱角有问题,因为我必须先检查某个位置是否存在,然后再检查它是否为1。我现在的解决方案是使用8个“if”语句,但它看起来很难看,似乎效率低下: counter = 0 if x+1 < len(board): if board[x+1][y] == 9: counter +

我正在尝试解决一个Python编码问题。给定一个仅包含1和0的数组,我必须编写一个程序,按照以下规则返回数组:

  • 每个1必须替换为9
  • 每个0必须替换为其周围(上方、下方、左侧、右侧)的1数量
  • 我的棱角有问题,因为我必须先检查某个位置是否存在,然后再检查它是否为1。我现在的解决方案是使用8个“if”语句,但它看起来很难看,似乎效率低下:

      counter = 0
      if x+1 < len(board):
        if board[x+1][y] == 9:
          counter += 1
      if y+1 < len(board[i]):
        if board[x][y+1] == 9:
          counter += 1
      if x-1 >= 0:
        if board[x-1][y] == 9:
          counter += 1
      if y-1 >= 0:
        if board[x][y-1] == 9:
          counter += 1
      board[x][y] = counter
    
    计数器=0
    如果x+1<长度(板):
    如果电路板[x+1][y]==9:
    计数器+=1
    如果y+1=0:
    如果电路板[x-1][y]==9:
    计数器+=1
    如果y-1>=0:
    如果电路板[x][y-1]==9:
    计数器+=1
    板[x][y]=计数器
    

    虽然它确实有效,但我想知道是否有更简单/更干净的解决方案可以实施。

    一种方法是使用逻辑短路:

    if x+1 < len(board) and board[x+1][y] == 9:
      counter += 1
    

    现在,您可以将所有四个lien放在一行中,或者甚至将所有四个布尔表达式组合成一个
    +=
    语句。

    我不清楚该代码片段如何适合您的解决方案,但是如果您的问题是邻域迭代,一个常见的技巧是预先定义偏移量:

    。。。
    #假设当前位置为(x,y)
    对于dx,dy in[(1,0),(0,1),(-1,0),(0,-1)]:
    tx=x+dx#t,如目标中所示
    ty=y+dy
    
    如果0是二维数组的输入?显示输入和输出示例。可能
    计数器+=board[x+1][y]//9
    请提供示例数据和可针对数据运行的完整程序。如果您认为代码工作正常,请确保代码为您提供的数据提供了正确的结果。这样,其他人可以玩你的代码,在以答案的形式呈现给你之前尝试他们的建议。关于第二个建议…我不喜欢依赖布尔值和整数之间的隐式转换。这本书读起来并不好,因为它假设并非所有Python程序员都会有这样的知识,而且在任何情况下都有点迟钝。我建议另一种选择:
    计数器+=1如果(x+1
    。看起来没那么圆滑,但更喜欢IMHO。
    counter += x+1 < len(board) and board[x+1][y] == 9