python - 在没有 numpy 的情况下搜索二维列表
问题描述
我正在寻找定义一个接受两个参数的函数: anint
和 a list
。
如果函数在列表中找到整数,则返回其坐标。
例如,我将如何在不使用 numpy的情况下对以下列表中的数字 4 执行此操作?
l = [
[0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 2, 1, 1, 0, 1, 1, 1, 0],
[0, 1, 0, 1, 0, 0, 0, 1, 0],
[0, 1, 0, 1, 1, 1, 0, 1, 0],
[0, 1, 0, 0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 0, 1, 1, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 0, 1, 1, 4, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]
]
您可以假设目标总是只出现一次并且总是包含在列表中。
解决方案
目标总是只出现一次并且总是包含在列表中
您可以使用enumerate
枚举外部列表和内部列表的元素。
def coords(lst, find):
return next((i, j) for i, sub in enumerate(lst)
for j, x in enumerate(sub)
if x == find)
演示与您的列表l
:
>>> coords(l, 2)
>>> (1, 1)
>>> coords(l, 1)
>>> (1, 2)
如果您以后想要在目标不在列表中时使函数正常工作,请记住它next
需要一个可选default
参数。
推荐阅读
- kotlin - 何时为类中的协程指定 Dispatchers.xxx
- sql - 带有 NEW 的 JPQL 请求花费了太多时间
- javascript - 如何在 JS 中为前 2 个字符编写正则表达式,可以是数字或字母,后跟连字符,然后是 6 位数字?
- android - 缩小应用程序时,Android PDF 查看器崩溃
- flutter - 长按 EditableText 小部件时不显示文本选择工具栏选项
- sql - SQL获取共享外键的所有行
- bash - 我可以找到哪个用户使用 sudo 来运行我的脚本吗?
- docusignapi - Docusign - 历史(通过第三方应用程序)
- hiredis - 在 ubuntu 16.04 上安装hiredis
- laravel - 使用 API Laravel 时出现文件放置错误