gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:58:01 25 4
gpt4 key购买 nike

我有一个问题,我需要创建一个函数来解决给定坐标 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com