Помогите разобрать фрагмент
Помогите, пожалуйста, разобраться в фрагменте кода?
По отдельности я знаю, что эти функции обозначают, а вот весь пазл тяжело собрать. В матрице нужно найти седловые точки (матрица типа n*m)
Сам код:
mx = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[9, 17, 18, 19, 20]
]
sp = []
# Вот этот фрагмент не понятен:
for r, line in enumerate(mx):
minimum = min(line)
for c, element in enumerate(line):
if element == minimum == max([line[c] for line in mx]):
sp.append([r + 1, c + 1])
for s in sp:
print(*s)
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Смотрите комментарии в коде:
# цикл по строкам матрицы
for r, line in enumerate(mx):
# находим минимальное значение в строке с индексом `r` (row)
minimum = min(line)
# цикл по значениям текущей строки (строка с индексом `r`)
# т.е. по значениям всех столбцов в данной/текущей строке
for c, element in enumerate(line):
# если текущий (`c`-й) элемент строки равен минимальному в текущей строке
# и одновременно равен максимальному значению в столбце `c`
# тогда добавляем к результирующему списку элемент матрицы с
# координатами [r + 1, c + 1]
# NOTE: зачем к `r` и `c` добавляется единица - я не понял
if element == minimum == max([line[c] for line in mx]):
sp.append([r + 1, c + 1])
PS: похоже единица прибавляется только для того. чтобы перевести стандартную питоновскую индексацию (начинающуюся с нуля) в привычную человеческую, где первый элемент будет иметь индекс 1 вместо 0.