[英]How do I compare the value in a list to the first value of a nested list and return the nested list results?
[英]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.