[英]Matrix python function
我有由此給出一個矩陣,該矩陣是一個非空和非負,對於一個起始位置(即表示矩陣的位置長度為2的非負列表)速記寫一個函數matrix[i][j]
它會返回最低相鄰值的位置(保持吉普車前進,直到找到僅通過其相鄰單元格/元素的最低值)。
例如:如果matrix = [[8,90,91,73],[60,6,32,84],[50,4,45,94],[12,85,3,2]]
且銷售位置= [0,0]
,它應該返回[3,3]
。 我想嘗試僅使用編程的基礎知識(如果語句,循環等)來實現此功能,可以使用諸如min或max之類的簡單輔助函數,但請不要太高級。
到目前為止,這是我所擁有的,但是由於索引超出范圍或范圍錯誤,它實際上並不能很好地工作:
def search_local_lowest_value(s: List[List[int]], position: List[int]) -> List[int]:
element1 = position[0]
element2 = position[1]
local_variable = s[element1][element2]
while local_variable <= s[row + 1][column] or local_variable <= s[row + 1][column + 1] \
or local_variable <= s[row + 1][column - 1] or local_variable <= s[row][column + 1] \
or local_variable <= s[row][column - 1] or local_variable <= s[row -1][column] \
or local_variable <= s[row - 1][column + 1] or local_varaible <= s[row - 1][column - 1]:
if local variable <= s[row + 1][column] or local_variable <= s[row + 1][column + 1] \
or local_variable <= s[row + 1][column - 1] or local_variable <= s[row][column + 1] \
or local_variable <= s[row][column - 1] or local_variable <= s[row -1][column] \
or local_variable <= s[row - 1][column + 1] or local_variable <= s[row - 1][column - 1]:
return min() // don't know what to fill for that
else:
return False
我提出了這個解決方案,我使用的方法更加清晰干燥:
def bordering(start, shape):
PATTERN = [[-1,-1], [-1, 0], [-1, 1], [0, 0], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]]
border = [[start[0] + x, start[1] + y] for x, y in PATTERN]
valid_border = [item for item in border if item[0] >= 0 and item[1] >= 0 and item[0] <= shape[0] - 1 and item[1] <= shape[1] - 1 ] # removes borders out of the matrix boundaries
return valid_border
def smaller_from(start, matrix):
shape = [len(matrix), len(matrix[0])]
borders = bordering(start, shape)
minimum = min([ [matrix[x][y], [x,y]] for x,y in borders ]) # maps the values and coordinates in valid borders and returns the minimum
return minimum
def find_minimum(start, matrix):
result = []
while True:
val_coords = smaller_from(start, matrix)
result = val_coords
if val_coords[0] >= matrix[start[0]][start[1]]:
break
else:
start = val_coords[1]
return result
matrix = [
[8,90,91,73],
[60,6,32,84],
[50,4,45,94],
[12,85,3,2]]
start = [0, 0]
find_minimum(start, matrix) #=> [2, [3, 3]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.