首页 > 解决方案 > 在没有 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]
    ]

您可以假设目标总是只出现一次并且总是包含在列表中。

标签: pythonpython-3.xlistfunction

解决方案


目标总是只出现一次并且总是包含在列表中

您可以使用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参数。


推荐阅读