Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 28, 2015 12:37:16

van
От: Харьков
Зарегистрирован: 2014-08-27
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

Требуется написать функцию, которая в аргументе принимает матрицу целых чисел (в виде вложенных списков), и возвращает координаты числа, которое есть минимальным в своей строке и максимальным в своем столбце. Например.

 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)       # значения, которые нужно сравнить
     # сравниваем значения в столбцах

Отредактировано van (Фев. 28, 2015 12:44:40)

Офлайн

#2 Фев. 28, 2015 14:07:44

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

Всегда одно значение должно возвращать или могут быть матрицы у которых могут выполнятся условие на нескольких координатах?

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)



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Фев. 28, 2015 14:08:13)

Офлайн

#3 Фев. 28, 2015 17:38:21

van
От: Харьков
Зарегистрирован: 2014-08-27
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

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)

Офлайн

#4 Фев. 28, 2015 18:14:05

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

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

поправил



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#5 Фев. 28, 2015 18:55:43

van
От: Харьков
Зарегистрирован: 2014-08-27
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

Спасибо, то что надо. Ушел разбирать код

Офлайн

#6 Фев. 28, 2015 20:07:20

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

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]])



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Фев. 28, 2015 20:19:43

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Сравнение столбцов в матрице

Ага, на дубли не проверил

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



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Отредактировано ajib6ept (Март 1, 2015 16:29:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version