Как вернуть индекс максимального и минимального числа в матрице?
matrix =[[2, 8, 9, 6]
[14, 23, 7, 1]
[3, 29, 4, 6]
[10, 2, 11, 13]]
def max_min(mtr):
s = []
def min_num(matrix):
min = matrix[0][0]
for row in matrix:
for num in row:
if min > num:
min = num
return min
def max_num(matrix):
max = matrix[0][0]
for row in matrix:
for num in row:
if num > max:
max = num
return max
s.append(min_num(mtr))
s.append(max_num(mtr))
return sorted(s)
print(max_min(matrix))
Ответы (1 шт):
Автор решения: Andy Pavlov
→ Ссылка
Могу предложить вариант через соединение списка в один, для которого потом применить sorted(). Отсюда сразу получаем минимальное число в начало и максимальное в конец.
Вариант, если нужно найти первое упоминание минимального и максимального числа в списке. На выходе список с двумя кортежами (число, индекс строки, индекс колонки):
def minmax(arr):
# Соединяем все в один список, добавляя номер строки и колонки
flat = sorted([(r, im, ir) for im, m in enumerate(arr) for ir, r in enumerate(m)])
# Возвращаем первый элемент, как минимальный и найденное первое упоминание максимума
return flat[0], next(filter(lambda x: x[0] == flat[-1][0], flat))
matrix =[[2, 8, 9, 6],
[14, 23, 7, 1],
[3, 29, 4, 6],
[10, 2, 11, 13]]
print(minmax(matrix)) # ((1, 1, 3), (29, 2, 1))
Либо вариант, когда длина внутренних списков одинакова. Соединяем все один список. Находим максимумы и минимумы, их индексы в новом списке, и уже индексы обратно по длине внутренних списков пересчитываем в номер строки и колонки.
def minmax(arr):
flat = [r for m in arr for r in m]
mn, mx = min(flat), max(flat)
imn, imx = flat.index(mn), flat.index(mx)
return (mn, imn // len(arr[0]), imn % len(arr[0])), \
(mx, imx // len(arr[0]), imx % len(arr[0]))
print(minmax(matrix)) # ((1, 1, 3), (29, 2, 1))