Зачем использовать функцию map ()?

Я работал с Python, и я заметил, что функция map() действительно не очень много делает. Например, если я пишу программу:

 mylist = [1, 2, 3, 4, 5] function = map(print, l) print(function) 

Это не дает никаких преимуществ:

 mylist = [1, 2, 3, 4, 5] for item in mylist: print(item) 

Фактически, второй вариант создает меньше переменных и, как правило, в целом чище для меня. Я бы предположил, что map() предоставляет преимущества, которые нельзя увидеть в примере, таком же упрощенном, как этот, но что это такое?

EDIT: Кажется, что некоторые люди отвечали на другой вопрос, чем тот, который я собирался спросить. Разработчики, которые сделали Python, явно приложили некоторую работу к созданию функции map() , и они даже решили НЕ взять ее из 3.0 и вместо этого продолжить работу над ней. Какую важную функцию они решили решить?

Раньше оно было более полезным для понимания списка. Вероятно, вы видели код

 [int(x[2]) for x in l] 

Перед рассмотрением списка вы должны написать это как

 map(lambda x: int(x[2]), l) 

(Это было еще до того, как map вернула итератор.)

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

 map(str, l) 

над

 (str(x) for x in l) 

Согласно документации карты : «Верните итератор, который применяет функцию к каждому элементу итерации, давая результаты».

Нет упакованного кода:

 def square(x): return x**2 def calculist(lista): for n in lista: yield square(n) numbers = [i for i in calculist(range(10))] 

Один код строки:

 numbers = map(lambda x: x**2, range(10)) 

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

Вы можете получить больше удовольствия от функционального программирования HOWTO от официального документа.

Одним из наиболее распространенных способов является преобразование типов всего списка

 >>> myList = ['1', '2', '3', '4'] # currently strings >>> myList ['1', '2', '3', '4'] >>> map(int, myList) # now ints [1, 2, 3, 4] >>> map(float, myList) # now floats [1.0, 2.0, 3.0, 4.0] 

Другим очень распространенным применением является передача списка через некоторую функцию

 >>> def addToFive(x): >>> return x + 5 >>> l = [1,2,3,4,5] >>> map(addToFive, l) [6, 7, 8, 9, 10] 

Это может быть гораздо менее многословным. Представьте, что вы хотите добавить + 1 к каждому элементу в списке int.

 old_list = [1, 2, 3, 4] new_list = [] for i in old_list: new_list.append(i+1) 

против

 old_list = [1, 2, 3, 4] new_list = map(lambda x: x+1, old_list) 

Вы говорите, что синтаксис карты кажется вам менее понятным. Тем не менее, картографирование часто используется в приложениях, так что вы скорее оцените, насколько они малы и кратки.

Это действительно помогает, если вы думаете о карте как функции, которая принимает входной список размера N и выводит новый список той же длины с преобразованием, выполняемым для каждого элемента. Если вы помните об этом, каждый раз, когда вы видите функцию карты, вы точно знаете, что должно произойти.

Вы заметите, что у Python есть некоторые другие функции функционального программирования, такие как reduce , filter , zip и т. Д. map является частью этого класса функций, хотя, хотя каждый из них реализует очень простую функцию, когда вы объединяете их в один оператор, вы можете получить очень мощный Результаты. С циклом for вы не можете добиться такой же выразительности так лаконично.