搜索没有numpy的二维列表

时间:2018-10-31 13:48:15

标签: python python-3.x list function

我要定义一个接受两个参数的函数:intlist

如果函数在列表中找到整数,则返回其坐标

例如,我如何对以下列表中的数字4进行操作,不使用numpy

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]
    ]

您可以假定目标将始终只显示一次,并且始终包含在列表中。

4 个答案:

答案 0 :(得分:6)

  

目标将始终只显示一次,并将始终包含在列表中

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

答案 1 :(得分:1)

您可以执行以下操作:

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]
    ]

def findElement(element, l):
    for i in range(len(l)):
        for j in range(len(l[i])):
            if element==l[i][j]:
                return (i,j)
    return None

print(findElement(4,l))

输出:

(11, 7)

答案 2 :(得分:0)

我会使用这样的解决方案:

function calculateArea(radius = 3)
{
    var area = Math.PI * radius*radius;
    console.log("The area is " + area);
}

我定义了一个函数搜索,可用于从输入列表中搜索某些值。

答案 3 :(得分:0)

这是我的方法:

def matrix_search(target, matrix):
    for row_index, row in enumerate(matrix):
        try:
            return (row_index, row.index(target))
        except ValueError:
            pass
    raise ValueError('Target {} not found'.format(target))

样品用量:

print(matrix_search(4, l))

注释

  • 要搜索简单列表,请使用.index()方法
  • .index()方法将返回元素的索引(如果找到)或抛出ValueError(如果找不到)。在我们的上下文中,我们只是忽略此异常,然后转到下一行。
  • 在循环结束时,由于找不到元素,我们将引发异常