Форум сайта python.su
Требуется написать функцию, которая в аргументе принимает матрицу целых чисел (в виде вложенных списков), и возвращает координаты числа, которое есть минимальным в своей строке и максимальным в своем столбце. Например.
saddle_point([[2, 4, 3], [0, 1, 2], [1, 5, 6]]
def saddle_point(matrix): #создаем необходимые переменные b = [] numb = [] # поиск минимума по строкам for i in matrix: m = min(i) # проверка количества if i.count(m) > 1: continue b.append(i.index(m)) # номера столбцов, которые надо проверить numb.append(m) # значения, которые нужно сравнить # сравниваем значения в столбцах
Отредактировано van (Фев. 28, 2015 12:44:40)
Офлайн
Всегда одно значение должно возвращать или могут быть матрицы у которых могут выполнятся условие на нескольких координатах?
def saddle_point(matrix): # поиск минимума по строкам for k, i in enumerate(matrix): m = min(i) # проверка количества if i.count(m) > 1: continue if m == max(zip(*matrix)[k]): return (i.index(m), k)
Отредактировано ajib6ept (Фев. 28, 2015 14:08:13)
Офлайн
ajib6ept, спасибо за ответ. Значение должно быть одно или False если значения нет.
При матрице
8 3 0 1 2 3 4 8 1 2 3
3 2 1 2 3 9 4 7 9 2 3
7 6 0 1 3 5 2 3 4 1 1
Ваша функция не работает. Должно вернуть (1, 2)
Офлайн
def saddle_point(matrix): for k, m in enumerate(matrix): num = min(m) if num == max(zip(*matrix)[m.index(num)]): return (k, m.index(num)) return False
Офлайн
Спасибо, то что надо. Ушел разбирать код
Офлайн
ajib6ept
def saddle_point(matrix): for k, m in enumerate(matrix): num = min(m) if num == max(zip(*matrix)[m.index(num)]): return (k, m.index(num)) return False print saddle_point([[3,4,3], [1,2,2], [4,2,2]])
Офлайн
Ага, на дубли не проверил
def saddle_point(matrix): for k, m in enumerate(matrix[:]): num = min(m) while num in m: if num == max(zip(*matrix)[m.index(num)]): return (k, m.index(num)) else: m[m.index(num)] = None return False
Отредактировано ajib6ept (Март 1, 2015 16:29:48)
Офлайн