Найти - Пользователи
Полная версия: Реализация собственной функции max
Начало » Python для новичков » Реализация собственной функции max
1
DenLadon
Привет всем!
Помогите реализовать собственную функцию 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{]”))

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

def my_max(*a, **b):
hasattr(a[0], '__iter__')
if 'key' in b:
    key = b['key']
ZerG
правильнее будет вам почитать про *args, **kwargs в питоне!
Там как раз детально расписан ваш случай.
Rodegast
Учись пока я жив:
# 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
Vigi
так reduce вроде как-бы не рекомендуют использовать (читаемость портится и тд и тп и бла бла бла)

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

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

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