Матричная функция питона - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно написать функцию, при которой заданная матрица, которая не пуста и не отрицательна, означает начальную позицию (неотрицательный список длины 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

1 Ответ

0 голосов
/ 13 ноября 2018

Я вышел с этим решением, я использовал методы, чтобы быть более ясным и сухим:

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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...