如何比较嵌套列表中的值?

时间:2019-10-30 21:36:01

标签: python python-3.x

所以我的矩阵看起来像这样:

m = [[1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 1, 2, 3],
     [4, 5, 6, 7]]

,我想将值与其相邻值进行比较,以便函数返回布尔值。例如,如果我输入的m[1][1]为6,则该函数应将6与1,2,3,5,7,9,1和2(6左右的单元格)进行比较,并返回6是否为最大数。另外,如果我输入的索引超出范围,例如m[0][4],该函数还应该返回False

我知道该如何做(有点),但是当涉及到边缘的值时,我完全被卡住了。我不能假设矩阵是4x4(可以是3x3,nxn等等),因此不可能用if语句写出每种情况。我该怎么办?

3 个答案:

答案 0 :(得分:0)

您应该自己为此做一些工作。

这里有一些代码可以帮助您入门:

def adjacent_cells(m, row, col):
    result = []
    for i, j in ((-1, -1), (-1, 0), (-1, 1),
                 (0, -1),          (0, 1),
                 (1, -1), (1, 0),  (1, 1)):
        try:
            i += row
            j += col
            if i >= 0 and j >= 0:
                result.append(m[i][j])
        except IndexError:
            pass
    return result

以此为基础来完成您的项目。

答案 1 :(得分:0)

这是一种解决方案:

m = [[1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 1, 9, 3],
     [4, 5, 6, 7]]

def maxAmongNeighbors(matrix,y,x):
    return (
        x in range(1,len(matrix[0]))
        and y in range(1,len(matrix))
        and matrix[y][x] >= max(
            *matrix[y-1][x-1:x+2],
            *matrix[y][x-1:x+2:2],
            *matrix[y-1][x-1:x+2]
        )
    )

print (maxAmongNeighbors(m,0,0))
print (maxAmongNeighbors(m,1,1))
print (maxAmongNeighbors(m,2,2))
False
False
True

答案 2 :(得分:0)

尝试一下:

import numpy as np

def isLargest(input, r,c):
    padded = np.pad(input, 1, mode='constant')
    value = input[r][c]
    r += 1
    c += 1
    if value >= max(padded[r-1][c], padded[r+1][c], padded[r][c-1], padded[r-1][c]):
        return True
    else:
        return False

我使用零填充并解决了这个问题。填充的矩阵为:

[[0 0 0 0 0 0]
 [0 1 2 3 4 0]
 [0 5 6 7 8 0]
 [0 9 1 2 3 0]
 [0 4 5 6 7 0]
 [0 0 0 0 0 0]]

然后您可以轻松检查状况。您唯一应该注意的是,行和列的索引应增加一个以映射原始值。