簡體   English   中英

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

[英]How do I compare values in a nested list?

所以我有一個矩陣看起來像這樣:

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

我想將值與其相鄰值進行比較,因此 function 返回一個布爾值。 例如,如果我輸入m[1][1]即 6,則 function 應將 6 與 1、2、3、5、7、9、1 和 2(6 左右的單元格)進行比較,並返回 6 是否為最大數字。 而且,如果我輸入超出范圍的索引,例如m[0][4] function 也應該返回False

我了解如何做這部分(有點),但是當它達到邊緣的值時,我完全被卡住了。 我不能假設矩陣是 4x4(它可以是任何東西,3x3,nxn)所以不可能用 if 語句寫出所有情況。 我應該怎么辦?

你應該自己做一些這方面的工作。

這里有一些代碼可以幫助您入門:

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

使用它作為構建塊來完成您的項目。

這是一個解決方案:

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

嘗試這個:

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

然后您可以輕松檢查狀況。 您應該注意到的唯一一件事是行和列索引應該增加一到 map 原始值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM