Найти - Пользователи
Полная версия: Функции высших порядков
Начало » Python для новичков » Функции высших порядков
1 2
appetito
Ferroman
Реализация map вроде бы верная, но что-то точно работает не как ожидается, так как 1+5+8 на самом деле не равняется 15.
описАлся я:):
1     2     3
4 5 6
7 8 9
--------------
12 15 18
Ferroman
>>> def mmap(f, *args):
... return [f(*t) for t in zip(*args)]
...
>>> mmap(lambda x,y,z:x+y+z, [1, 4, 7], [2, 5, 8], [3, 5, 9])
[6, 14, 24]
Да нет, 1+4+7 никак не 6, точнов вам говорю. Судя по всему, ошибка в том, что лямбда суммирует не содержимое списка, а количество элементов этого списка.
sp3
>>> def mmap(f, *args):
... return [f(*t) for t in zip(*args)]
...
>>> mmap(lambda x,y,z:x+y+z, [1, 4, 7], [2, 5, 8], [3, 5, 9])
[6, 14, 24]
>>> map(lambda x,y,z:x+y+z, [1, 4, 7], [2, 5, 8], [3, 5, 9])
[6, 14, 24]
суммирование не содержимого списка, а поэлементно их каждого списка. Разве не так должно быть?
Ferroman
Да нет всё правильно, я просто почему-то решил, что вы пытаетесь суммировать элементы каждого списка отдельно и сформировать список с результатами. Надо быть внимательнее.
sypper-pit
Ferroman
спать надо б лечь :) и высыпаться больше
Ferroman
Есть такое.
AmF
Ferroman
sypper-pit
sp3
appetito

Огромное Спасибо за помощь!

А если теперь map написать через лямбда, то будет так?

map = lambda f, *args: (f(*t) for t in zip(*args))
Спасибо!
appetito
map = lambda f, *args: (f(*t) for t in zip(*args))
такая функция вернет генератор, чтобы вернула список, надо использовать квадратные скобки:

map = lambda f, *args: [(*t) for t in zip(*args)]
AmF
такая функция вернет генератор, чтобы вернула список, надо использовать квадратные скобки:

map = lambda f, *args: [(*t) for t in zip(*args)]
Ну да-да … это мой баг …

Еще такой вопрос: max(ls) - что-то с ней у меня криво всё выходит … Может, кто подскажет, как ее оформить?
И, может, несложно будет глянуть на мою реализацию filter(func, ls) - тру или нет:

def filt(func, ls):
if func:
return [i for i in ls if func(i)]

else:
return [i for i in ls if i]
filt = lambda func, ls: [i for i in ls if func(i)] if func else [i for i in ls if i]
Спасибо.
sypper-pit
AmF
Если код работает так кк надо тебе , это уже тру :)
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