python - 如何在嵌套列表中获取小于周围的值的值
问题描述
所以基本上我必须在嵌套列表中找到与其周围的数字相比最小的数字。这将被称为“接收器”,如果它是接收器,则该函数返回 True,否则返回 False。例如,如果嵌套列表是
[[1, 2, 1],
[4, 6, 5],
[7, 8, 9]]
那么 [0,2], (1) 处的数字应该为真,因为与其相邻的所有值都小于 1,但 [2, 0], (7) 处的数字不应该为真大于它周围的一些值。
我尝试使用切片来获取旁边的数字,但我不知道如何切片以从水槽或上方或下方获取对角线的数字。这是我尝试做的一些代码:
for x in elevation_map:
for xs in x:
if elevation_map[cell[0]][cell[1]] < xs[cell[0]]:
return True
return False
解决方案
您可以将列表列表转换为numpy
数组,迭代索引,并使用二维切片来获取子矩阵并检查当前位置的值是否为最小值。
>>> import numpy as np
>>> from itertools import product
>>> m = np.array([[1, 2, 1],
... [4, 6, 5],
... [7, 8, 9]])
...
>>> [(r, c, m[r,c]) for r,c in product(*map(range, m.shape))
... if m[r,c] == m[max(0,r-1):r+2,max(0,c-1):c+2].min()]
...
[(0, 0, 1), (0, 2, 1)]
(max(0, ...)
这样下限0-1
不引用数组中的最后一个元素;如果上限高于数组的大小,那不是问题。)
注意:如果它的一个邻居具有相同的值,这也会将一个点标识为“汇” ;不确定这是否是一个问题。
推荐阅读
- symfony - 在控制器的构造函数中自动装配的 Symfony 4.4 服务没有从服务定义(setContainer)中获得调用
- r - 如何合并r中列表中包含的数据帧中的行
- php - 如何让 php 表单在谷歌云实例上工作?
- java - 使用 Big Integer 进行更高值的斐波那契计算的无限循环?
- .net-core - 0365 身份验证.NET CORE
- java - java.lang.AbstractMethodError:抽象方法“com.google.android.gms.tasks.Task Firebase 更新后
- parameters - 从 URL Yii2 获取参数
- android - 在 Android 7 Nougat Shell 中启动守护程序“未启用硬链接/软链接保护”时出现 Greengrass 错误
- reactjs - useContext 不在同一个渲染上更新
- scala - 使用 Gatling 对 SSO 登录 UI 应用程序进行性能测试