Способ reduce
работает следующим образом:
Примите значение по умолчанию (последний параметр) и первый элемент последовательности и примените предоставленную функцию. Здесь мы берем 0
и 10
и вычисляем: count + 1 if 0 < 10 else count + 0
.
Возьмем результат этой операции и применим функцию к этому и второму элементу, и и так далее.
Вы не можете ожидать, что проблема решится таким образом, потому что ничего из этого на самом деле не переназначает count
- оно остается равным 0
независимо от того, сколько раз это повторяется. Каждое приложение lambda
просто производит либо 0
, либо 1
. Кроме того, эти значения 0
и 1
переносятся на следующий шаг, вместо того, чтобы запоминать предыдущее максимальное значение.
reduce
- не подходящий инструмент для этой работы, но вы можете заставить его работать, вычисляя кортеж (максимальное значение, видимое до сих пор, считайте) на каждом шаге. (Вам действительно нужно использовать значение, возвращаемое reduce
, и не иметь никаких внешних count
.)