Форум сайта python.su
FerromanописАлся я:):
Реализация map вроде бы верная, но что-то точно работает не как ожидается, так как 1+5+8 на самом деле не равняется 15.
1 2 3
4 5 6
7 8 9
--------------
12 15 18
Отредактировано (Окт. 21, 2010 16:02:06)
Офлайн
>>> 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]
Офлайн
>>> 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
спать надо б лечь :) и высыпаться больше
Офлайн
Есть такое.
Офлайн
Ferroman
sypper-pit
sp3
appetito
Огромное Спасибо за помощь!
А если теперь map написать через лямбда, то будет так?
map = lambda f, *args: (f(*t) for t in zip(*args))
Отредактировано (Окт. 23, 2010 22:55:12)
Офлайн
map = lambda f, *args: (f(*t) for t in zip(*args))
map = lambda f, *args: [(*t) for t in zip(*args)]
Офлайн
такая функция вернет генератор, чтобы вернула список, надо использовать квадратные скобки:Ну да-да … это мой баг …map = lambda f, *args: [(*t) for t in zip(*args)]
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]
Отредактировано (Окт. 24, 2010 15:26:38)
Офлайн
AmF
Если код работает так кк надо тебе , это уже тру :)
Офлайн