Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 27, 2016 22:56:03

DenLadon
Зарегистрирован: 2016-06-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализация собственной функции max

Привет всем!
Помогите реализовать собственную функцию max.
Главная для меня проблема, не могу как следует распаковать все аргументы принимаемые функцией для сравнения. Либо код растягивается на очень много строк, либо просто не дает возможность сравнивать аргументы между собой.

Тестил на примерах:
max(3, 2)
max(, , , )
max([, , ], key=lambda x: x)
max(x + 5 for x in range(6))
max(abs(i) for i in range(-10, 10))
max(filter(str.isalpha,“@v$e56r5CY{]”))

Огромная просьба наставить на путь истинный и лучше без готового решения.
Заранее спасибо!

Прикреплённый файлы:
attachment images.jpg (5,9 KБ)

Офлайн

#2 Июнь 28, 2016 02:46:39

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

Реализация собственной функции max

вам нужно 3 вещи

def my_max(*a, **b):
hasattr(a[0], '__iter__')
if 'key' in b:
    key = b['key']



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

Офлайн

#3 Июнь 28, 2016 07:38:36

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Реализация собственной функции max

правильнее будет вам почитать про *args, **kwargs в питоне!
Там как раз детально расписан ваш случай.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Июнь 28, 2016 10:35:28

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2822
Репутация: +  185  -
Профиль   Отправить e-mail  

Реализация собственной функции max

Учись пока я жив:

# MAX
>>> reduce(lambda x,y: x if x > y else y, [0,10,5,8,100,9])
100
# MIN
>>> reduce(lambda x,y: x if x < y else y, [0,10,5,8,100,9])
0



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июнь 28, 2016 11:58:49

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Реализация собственной функции max

так reduce вроде как-бы не рекомендуют использовать (читаемость портится и тд и тп и бла бла бла)

Офлайн

#6 Июнь 28, 2016 17:43:56

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2822
Репутация: +  185  -
Профиль   Отправить e-mail  

Реализация собственной функции max

Vigi
так reduce вроде как-бы не рекомендуют использовать (читаемость портится и тд и тп и бла бла бла)

Конечно в реальных программах заменять функцию max на то что я написал как-бы ненужно.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июнь 28, 2016 18:43:44

DenLadon
Зарегистрирован: 2016-06-27
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Реализация собственной функции max

На счет *args, **kwargs это понятно, что надо использовать, а теперь с помощью terabayt понятно как отделить итерируемые аргументы от неитерируемых.
Но распаковка итерируемых объектов страдает, г…код какой-то получается.
Получаются списки разной глубины вложенности при следующих случаях:
max([, , ], key=lambda x: x)
max(, , , )

На счет использования reduce. Интересно конечно, но работает когда у тебя уже создан список (а вот с этим как раз и проблема). Но и тут возникнут трудности при обработке значений по передаваемому key.
Я честно говоря выбирал max значение с помощью сортировки списка.

Отредактировано DenLadon (Июнь 28, 2016 18:45:46)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version