Найдите, сколько раз изменяется максимальное значение в списке с помощью Redu () (Python) - PullRequest
0 голосов
/ 29 апреля 2020

Используя функцию reduce(), я должен определить, сколько раз изменяется максимальное значение списка. Вот мой код, но я не понимаю, почему count остается равным 0.

from functools import reduce

count = 0

heights = [10, 8, 11, 2, 1, 4, 13, 11]

reduce(lambda a, b: count + 1 if a < b else count + 0, heights, 0)

print(count)

1 Ответ

2 голосов
/ 29 апреля 2020

Способ reduce работает следующим образом:

  • Примите значение по умолчанию (последний параметр) и первый элемент последовательности и примените предоставленную функцию. Здесь мы берем 0 и 10 и вычисляем: count + 1 if 0 < 10 else count + 0.

  • Возьмем результат этой операции и применим функцию к этому и второму элементу, и и так далее.

Вы не можете ожидать, что проблема решится таким образом, потому что ничего из этого на самом деле не переназначает count - оно остается равным 0 независимо от того, сколько раз это повторяется. Каждое приложение lambda просто производит либо 0, либо 1. Кроме того, эти значения 0 и 1 переносятся на следующий шаг, вместо того, чтобы запоминать предыдущее максимальное значение.

reduce - не подходящий инструмент для этой работы, но вы можете заставить его работать, вычисляя кортеж (максимальное значение, видимое до сих пор, считайте) на каждом шаге. (Вам действительно нужно использовать значение, возвращаемое reduce, и не иметь никаких внешних count.)

...