Космическая Сложность Карты - PullRequest
1 голос
/ 20 апреля 2020

Сообщество python рекомендует использовать карту с лямбдой вместо всех oop, где это возможно. Например:

Метод 1: Использование понимания списка

return [element*2 for element in myList]

Метод 2: Использование карты с лямбда

return list(map(lambda element: element*2, myList))

Метод 3: Пока l oop

i = 0
while i < len(myList):
    myList[i] *= 2
    i += 1
return myList

Однако сложность пространства составляет:

Генератор метода 1: O (n)

Карта метода 2: O (n)

Метод 3 L oop: O (1)

Я что-то упустил? Почему лучше использовать генератор или карту?

1 Ответ

1 голос
/ 20 апреля 2020

Комментарии к вашему вопросу уже ясно дают понять, что не так с вопросом.

Но чтобы ответить «почему использование генератора [..] лучше?», По крайней мере, в тех случаях, когда это может быть - поскольку ни одно решение не всегда является лучшим, независимым от контекста: генераторы

  • могут передаваться и иметь состояние, циклы не могут и не имеют (не по умолчанию в любом случае; вы можете добавить его, но вы бы строили самогонные генераторы); генераторы
  • могут быть скомпонованы и (если написано правильно для этого), при этом все равно использовать преимущества параллелизма, циклы могут делать это только в том случае, если известна полная функциональная композиция заранее - или вы пишете l oop в функции генератора, в этом случае вы все равно строите генератор.

И «почему использование [..] map superior?», по крайней мере, в случаи, когда это может быть - так как ни одно решение не всегда является лучшим, независимым от контекста:

  • map - правильный выбор, когда у вас уже есть функция и итерация, и Вы просто должны написать генератор, который сделал то же самое;
    то есть map(sqrt, xs) против (sqrt(x) for x in xs)
  • map имеет некоторую функциональность, которая берет на себя работу и запутывает то, что вы пытаетесь сделать, если у вас есть несколько итеративные входы, из которых выбираются входы для функции.
    например, map(pair, [1, 2, 3, 4, 5], ['a', 'b', 'c']) (где pair принимает два аргумента)

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

...