Форум сайта python.su
начальные условия:
ось - виндоза ХР
среда - IDLE Python 2.7
lst = range(10)
f = lambda x, y: (x[0] + y, x[1]+[x[0] + y])
print reduce(f, lst, (0, []))
Офлайн
Guido van RossumПоследуем примеру:
…So now reduce(). This is actually the one I've always hated most, because, apart from a few examples involving + or *, almost every time I see a reduce() call with a non-trivial function argument, I need to grab pen and paper to diagram what's actually being fed into that function before I understand what the reduce() is supposed to do. So in my mind, the applicability of reduce() is pretty much limited to associative operators, and in all other cases it's better to write out the accumulation loop explicitly. .
lst = [0,1,2,3,4]
f = lambda x, y: (x[0] + y, x[1]+[x[0] + y])
print reduce(f, lst, (0, []))
Передан инициализатор ((0, [])) значит вместо первого элемента списка берем его:
f((0,[]), 0) =
(0 + 0, [] + [0 + 0]) =
(0,[0])
Результат передаем первым аргументом. Следующий элемент списка вторым:
f((0,[0]), 1) =
(0 + 1, [0] + [0 + 1]) =
(1, [0, 1])
и тд...
f((1, [0, 1]), 2) =
(1 + 2, [0, 1] + [1 + 2]) =
(3, [0, 1, 3])
f((3, [0, 1, 3]), 3) =
(3 + 3, [0, 1, 3] + [3 + 3] =
(6, [0, 1, 3, 6])
f((6, [0, 1, 3, 6]), 4) =
(6 + 4, [0, 1, 3, 6] + [6 + 4]) =
(10, [0, 1, 3, 6, 10])
.................................Тут терпение закончилось :)
>>> f((10, [0, 1, 3, 6, 10]), 5)
13: (15, [0, 1, 3, 6, 10, 15])
>>> f((15, [0, 1, 3, 6, 10, 15]), 6)
14: (21, [0, 1, 3, 6, 10, 15, 21])
>>> f((21, [0, 1, 3, 6, 10, 15, 21]), 7)
15: (28, [0, 1, 3, 6, 10, 15, 21, 28])
>>> f((28, [0, 1, 3, 6, 10, 15, 21, 28]), 8)
16: (36, [0, 1, 3, 6, 10, 15, 21, 28, 36])
>>> f((36, [0, 1, 3, 6, 10, 15, 21, 28, 36]), 9)
17: (45, [0, 1, 3, 6, 10, 15, 21, 28, 36, 45])
>>>
Отредактировано (Июнь 24, 2011 21:56:55)
Офлайн
f = lambda x, y: (x[0] + y, x[1]+[x[0] + y])
print f( (0, []), 5 )
Офлайн
ну раз
с уважениеми на пальцах, то смотри:
l=[1,2,3]
f=lambda x,y:x+y
print reduce(f,l)
l=[1,2,3]
f=lambda x,y:x+y
print reduce(f,l,0)
l=[1,2,3]
f=lambda x,y:x+y
print reduce(f,l,1)
lst = range(10)кароче взяли мы 3-ю строку:
f = lambda x, y: (x + y, x+[x + y])
print reduce(f, lst, (0, ))
f((1, ), 2) = (1 + 2, + ) = (3, )f((1, ), 2) - здесь (1, это x из кортежа (0, ) . ), это второй элемент кортежа x и 2 это y
Отредактировано (Июнь 25, 2011 07:19:43)
Офлайн
ОООООООООООО !!!!!!!!!!!!!!!!!!!!!!! (по ихнему ВАУ!)
огромное спасибо, братцы, теперь понятно почему оно работает
ключевым был пост с коментом:
o7412369815963я принял его за обычное математическое выражение
это список, а все выражение - добавление к списку
Отредактировано (Июнь 25, 2011 10:04:53)
Офлайн