Найти - Пользователи
Полная версия: Сравнение столбцов в матрице
Начало » Центр помощи » Сравнение столбцов в матрице
1
van
Требуется написать функцию, которая в аргументе принимает матрицу целых чисел (в виде вложенных списков), и возвращает координаты числа, которое есть минимальным в своей строке и максимальным в своем столбце. Например.
 saddle_point([[2, 4, 3],
               [0, 1, 2],
               [1, 5, 6]]
Должно вернуть => (0, 0)

С нахождением минимального значения в строке проблем не возникает, а вот сравнить эти значения с значениями в соответствующем столбце пока не выходит. Помогите, дописать функцию.
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)       # значения, которые нужно сравнить
     # сравниваем значения в столбцах
ajib6ept
Всегда одно значение должно возвращать или могут быть матрицы у которых могут выполнятся условие на нескольких координатах?
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)
van
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)
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

поправил
van
Спасибо, то что надо. Ушел разбирать код
terabayt
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]])
ajib6ept
Ага, на дубли не проверил

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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB