Т.к. лучше всего я разобрался со сверткой, то попытался сделать это для редьюс:
def reduce(func, ls, val):
if ls:
return reduce(func, ls[1:], func(val, ls[0]))
else:
return val
Спасибо
def reduce(func, ls, val):
if ls:
return reduce(func, ls[1:], func(val, ls[0]))
else:
return val
AmFна больших последовательностях ваша reduce не будет работать из-за ограничения на глубину рекурсии, надо делать итеративную функцию.
Всем привет! Вот бьюсь над такой задачей: надо определить некоторые ф-ции высших порядков: filter(func, ls), sum(ls), max(ls), map(func, ls1, ls2, …), reduce(func, ls, val).
Т.к. лучше всего я разобрался со сверткой, то попытался сделать это для редьюс:Может, кто-то может проверить этот код на правильность(типа, есть ли ошибки) и подсказать, как определить, например, map …def reduce(func, ls, val):
if ls:
return reduce(func, ls[1:], func(val, ls[0]))
else:
return val
Спасибо
def mmap(f, ls):
return [f(i) for i in ls]
appetitoМне не нужны большие последовательности - мы недавно начал Питон - надо просто описать принцип работы.
на больших последовательностях ваша reduce не будет работать из-за ограничения на глубину рекурсии, надо делать итеративную функцию
appetitoСпасибо! А если в map передается неизвестное кол-во переменных? (для 2 переменных я сообразил):
a map:def mmap(f, ls):
return [f(i) for i in ls]
>>> def mmap(f, *args):
... return [ f(i) for i in [k for k in args] ]
...
>>> mmap(sum, [1, 2, 3])
[6]
>>> mmap(sum, [1, 2, 3], [1, 2, 3])
[6, 6]
>>>
def mmap(f, *args):
return [f(*t) for t in zip(*args)]
mmap(lambda x,y,z:x+y+z,[1,2,3],[4,5,6],[7,8,9])
[12, 15, 18]
Ferromanпочему? (у меня работает)
appetito
Этот код работать не будет.
Ferromanкод работает в Python 2.5.4, причем аналогично встроенной функции map, т.е. 1+4+7=12 ,2+5+8=15, 3+5+9=18
Да, дейсвительно, в 2.6 заработал. Просто, помнится, у меня ругался когда-то при указании * перед названиями переменной. В любом случае, код очевидно работает не правильно: 1+2+3 != 12 как и 7+8+9!=18