arrays - 如何在 Python 3 中计算嵌套列表中的特定邻居

标签 arrays python-3.x list

我有一个问题,我需要创建一个函数来解决给定坐标 x、y 的嵌套列表中 N(忍者)的数量:

ninjas = [['N', ' ', ' ', ' ', ' '],
         ['N', 'N', 'N', 'N', ' '],
         ['N', ' ', 'N', ' ', ' '],
         ['N', 'N', 'N', ' ', ' '],
         [' ', ' ', ' ', ' ', ' '],
         [' ', ' ', ' ', ' ', ' ']]

因此,如果我的坐标为 x=1 且 y=2,则该函数应返回 8(该坐标周围的忍者数量)。我已经与这个问题斗争了 48 个小时,但我无法解决这个问题。该解决方案不应包含任何花哨的 numpy.imports。只有基本的 for 循环和...

我应该如何处理这个问题?有什么提示吗?

最佳答案

方式超过PEP-8 79line 的字符数限制,但这是我的 one-line解决办法:

def surrounding(ninjas, x, y):
   return [ninjas[r][c] for r in range(y-1 if y > 0 else y, y + 2 if y < len(ninjas)-1 else y + 1) for c in range(x-1 if x > 0 else x, x + 2 if x < len(ninjas[0])-1 else x + 1)].count('N')

按预期工作:

surrounding(ninjas, 1, 2)

给出 8 .

surrounding(ninjas, 4, 5)

给出 0 .

<小时/>

如果您想将其分解为更易读的内容,那么这里有一个更明智的 function完成这项工作:

def surrounding(ninjas, x, y):
   neighbours = []
   for r in range(y-1 if y > 0 else y, y+2 if y < len(ninjas)-1 else y+1):
      for c in range(x-1 if x > 0 else x, x+2 if x < len(ninjas[0])-1 else x+1):
         neighbours.append(ninjas[r][c])
   return neighbours.count('N')
<小时/>

请注意,这两个解决方案都依赖于 ninjas listrectangular

<小时/>

它们如何工作

两者functions以同样的方式工作,只是将一个塞进list-comprehension另一个appendslistneighbours .

计算周围忍者的步骤如下:

  1. 初始化 list存储 cell值(value)观/
  2. 循环rows2d-list来自1如果从输入位置到 1 上方没有墙壁,则位于上方下面如果有...
  3. 循环columns当前row内来自1如果进入的地方没有其他墙壁,则向左...
  4. 添加cellneighbours list
  5. 返回neighbours中有多少个忍者list使用.count('N')
<小时/>

还有一点需要注意的是,这个问题可以通过稍微不同的方式来解决。而不是添加每个 celllist并计算其中的忍者 list ,我们可以添加 1到一个变量,如果 cell是一名忍者。

其代码如下所示:

def surrounding(ninjas, x, y):
   noNinjas = 0
   for r in range(y - 1 if y > 0 else y, y + 2 if y < len(ninjas) else y + 1):
      for c in range(x - 1 if x > 0 else x, x + 2 if x < len(ninjas) else x + 1):
         if ninjas[r][c] == 'N':
            noNinjas += 1
   return noNinjas

关于arrays - 如何在 Python 3 中计算嵌套列表中的特定邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994453/

相关文章:

java - 我最多只能打印 "red: 1",之后我的程序由于使用 break 语句而结束

java - 尝试将 BufferedImage 转换为 int 数组时出错

PHP - 为什么数组中两个项目的值都会发生变化?

Python 3.8.0 奇怪的打印错误

python - Pandas 中的 read_excel 错误 ('ElementTree' 对象没有属性 'getiterator' )

python - 将文件中的所有变量导入列表

python - 为什么 '.sort()' 在 Python 中导致列表为 'None'?

c++ - 对包含结构的 std::list 进行排序

python - 为什么 Numpy 有维度 (n,) 而不是 (n,1) 只有

python - 在 python 中输出列表