Что такое map в python
Перейти к содержимому

Что такое map в python

  • автор:

Что такое map в python

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Функция map() в Python, обработка последовательности без цикла

Применяет определенную функцию к каждому элементу в последовательности

Синтаксис:
map(function, iterable, . ) 
Параметры:
  • function — пользовательская функция, вызывается для каждого элемента,
  • iterable — последовательность или объект, поддерживающий итерирование.
Возвращаемое значение:
  • map object — объект итератора.
Описание:

Функция map() выполняет пользовательскую функцию function для каждого элемента последовательности, коллекции или итератора iterable . Каждый элемент iterable отправляется в функцию function в качестве аргумента.

Если в map() передаётся несколько iterable , то пользовательская функция function должна принимать количество аргументов, соответствующее количеству переданных последовательностей, при этом function будет применяться к элементам из всех итераций параллельно.

# функция должна принимать столько # аргументов, сколько последовательностей # передается в функцию map() def plus(a, b, c): return a + b +c # функция 'plus' применяется к элементам # из всех последовательностей параллельно >>> x = map(plus, [1, 2], [3, 4], [5, 6]) >>> list(x) # [9, 12] 

При использовании нескольких последовательностей, функция map() останавливается, когда исчерпывается самая короткая итерация.

def create_tuple(a, b): return a, b # функция `map()` останавливается, когда # заканчивается самая короткая последовательность >>> x = map(create_tuple, ['a', 'b'], [3, 4, 5]) >>> print(dict(x)) #

Можно также использовать любую встроенную функцию с функцией map() при условии, что функция принимает аргумент и возвращает значение.

>>> x = [1, 2, 3] >>> y = [4, 5, 6, 7] # вычисление при помощи встроенной функции 'pow()' # 'x' в степени 'y' для каждого элемента 2-х списков >>> list(map(pow, x, y)) # [1, 32, 729] 

Для случаев, когда входные данные функции уже организованы в кортежи аргументов, смотрите функцию itertools.starmap() .

Преимуществ использования map() :

  • Так как функция map() написана на языке C и хорошо оптимизирована, ее внутренний цикл более эффективный, чем обычный цикл for в Python.
  • Низкое потребление памяти. С помощью цикла for .. in: программе необходимо хранить в памяти системы весь список элементов последовательности над которым производятся какие-то действия внутри цикла. При помощи функции map() элементы последовательности извлекаются по запросу, следовательно при каждом внутреннем цикле map() в памяти системы находится и обрабатывается только один элемент последовательности.

Примеры обработки последовательностей без циклов.

  • Подсчет количества символов в каждом элементе кортежа;
  • Создание словаря из двух списков;
  • Удаление пунктуации в тексте.
Подсчет количества символов в каждом элементе кортежа:
>>> x = map(len, ('apple', 'banana', 'cherry')) >>> list(x) # [5, 6, 6] 
Создание словаря из двух списков.
>>> x = map(lambda *args: args, [1, 2], [3, 4]) >>> dict(x) #
Удаление пунктуации в тексте при помощи map() .
>>> import re >>> def clean(word): . return re.sub(r"[`. ;,'\"()-]", "", word.strip()) >>> text = """С помощью цикла `for .. in:` программе необходимо хранить в памяти системы весь (список)! """ >>> word = text.split() >>> word = map(clean, word) >>> text = ' '.join(word) >>> text # 'С помощью цикла for in программе необходимо # хранить в памяти системы весь список' 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Функция abs(), абсолютное значение числа
  • Функция all(), все элементы True
  • Функция any(), хотя бы один элемент True
  • Функция ascii(), преобразует строку в ASCII
  • Функция bin(), число в двоичную строку
  • Класс bool(), логическое значение объекта
  • Функция breakpoint(), отладчик кода
  • Класс bytearray(), преобразует в массив байтов
  • Класс bytes(), преобразует в строку байтов
  • Функция callable(), проверяет можно ли вызвать объект
  • Функция chr(), число в символ Юникода
  • Класс classmethod, делает функцию методом класса
  • Функция compile() компилирует блок кода Python
  • Класс complex(), преобразует в комплексное число
  • Функция delattr(), удаляет атрибут объекта
  • Класс dict() создает словарь
  • Функция dir(), все атрибуты объекта
  • Функция divmod(), делит числа с остатком
  • Функция enumerate(), счетчик элементов последовательности
  • Функция eval(), выполняет строку-выражение с кодом
  • Функция exec(), выполняет блок кода
  • Функция filter(), фильтрует список по условию
  • Класс float(), преобразует в вещественное число
  • Функция format(), форматирует значение переменной
  • Класс frozenset(), преобразует в неизменяемое множество
  • Функция getattr(), значение атрибута по имени
  • Функция globals(), переменные глобальной области
  • Функция hasattr(), наличие атрибута объекта
  • Функция hash(), хэш-значение объекта
  • Функция help(), справка по любому объекту
  • Функция hex(), число в шестнадцатеричную строку
  • Функция id(), идентификатор объекта
  • Функция input(), ввод данных с клавиатуры
  • Класс int(), преобразует в тип int
  • Функция isinstance(), принадлежность экземпляра к классу
  • Функция issubclass(), проверяет наследование класса
  • Функция iter(), создает итератор
  • Функция len(), количество элементов объекта
  • Класс list(), преобразовывает в список
  • Функция locals(), переменные локальной области
  • Функция map(), обработка последовательности без цикла
  • Функция max(), максимальное значение элемента
  • Класс memoryview(), ссылка на буфер обмена
  • Функция min(), минимальное значение элемента
  • Функция next(), следующий элемент итератора
  • Класс object(), возвращает безликий объект
  • Функция oct(), число в восьмеричную строку
  • Функция open(), открывает файл на чтение/запись
  • Функция ord(), число символа Unicode
  • Функция pow(), возводит число в степень
  • Функция print(), печатает объект
  • Класс property(), метод класса как свойство
  • Класс range(), генерирует арифметические последовательности
  • Функция repr(), описание объекта
  • Функция reversed(), разворачивает последовательность
  • Функция round(), округляет число
  • Класс set(), создает или преобразовывает в множество
  • Функция setattr(), создает атрибут объекта
  • Класс slice(), шаблон среза
  • Функция sorted(), выполняет сортировку
  • Декоратор staticmethod(), метод класса в статический метод
  • Класс str(), преобразует объект в строку
  • Функция sum(), сумма последовательности
  • Функция super(), доступ к унаследованным методам
  • Класс tuple(), создает или преобразует в кортеж
  • Класс type(), возвращает тип объекта
  • Функция vars(), словарь переменных объекта
  • Функция zip(), объединить элементы в список кортежей
  • Функция __import__(), находит и импортирует модуль
  • Функция aiter(), создает асинхронный итератор
  • Функция anext(), следующий элемент асинхронного итератора

Что делает функция map в Python?

Функция map принимает в качестве аргументов какую-либо функцию и итерируемый объект. Далее каждый элемент коллекции передается в эту функцию в качестве аргумента, где с ним происходят операции, в соответствии с кодом функции:

# объявим функцию, которая возвращает длину объекта def myfunc(a): return len(a) # с помощью нашей функции посчитаем # длину каждого слова в коллекции x = map(myfunc, ('apple', 'banana', 'cherry')) print(x) # => print(list(x)) # => [5, 6, 6] 
def myfunc(a, b): return a + b x = map(myfunc, ('apple', 'banana', 'cherry'), ('orange', 'lemon', 'pineapple')) print(list(x)) # => ['appleorange', 'bananalemon', 'cherrypineapple'] 

Функция map() в Python

Если вы учитесь программировать, то функция map() в Python — это ваша возможность повысить свой уровень и упростить решение некоторых задач.

Представьте себе: вы хотите стать более эффективным разработчиком. Вы хотите, чтобы ваш код компилировался быстрее. Вы хотите произвести впечатление на коллег своими глубокими знаниями в области программирования. Если что-то из этого находит отклик у вас в душе, значит, вы попали в нужное место.

Прежде чем двигаться дальше, давайте разберемся, что такое функции и итерируемые объекты. Функции — это код, который выполняет определенную задачу. Например: len() , print() , str() . Итерируемые объекты — это объекты, содержащие один или несколько членов. К итерируемым объектам относят списки, кортежи, словари и др.

Функция map() в Python — это функция, которая позволяет вам преобразовывать весь итерируемый объект с помощью другой функции. Ключевой концепцией здесь являются преобразования, которые могут включать:

  • преобразование строк в числа
  • округление чисел
  • получение длины каждого повторяемого члена
  • и пр.

На данном этапе может возникнуть вопрос: а почему нельзя просто сделать это с помощью цикла for ? Ответ прост: можно, но использование функции map() сэкономит память (а это значит, что ваш код будет работать быстрее). Более того, решение с использованием map() делает ваш код более компактным.

Давайте рассмотрим пример, чтобы вы могли понять, что мы имеем в виду. Допустим, у вас есть список строк list_of_strings = [«5», «6», «7», «8», «9», «10»] , которые на самом деле являются числами. Нужно преобразовать этот список в список целых чисел. Для этого можно использовать пустой список и цикл for :

list_of_strings = ["5","6","7","8","9", "10"] result = [] for string in list_of_strings: result.append(int(string)) print(result)

Если вы запустите этот пример, вы получите: [5, 6, 7, 8, 9, 10].

Что при использовании цикла for происходит под капотом?

Мы можем быть довольны результатом преобразования списка строк в список чисел, но давайте подумаем о том, что только что сделал наш код.

Мы сказали компьютеру пройтись по каждому члену («5», «6», «7» и т.д.), преобразовать член, а затем сохранить его в новом списке. Хотя использование цикла for для преобразования списка является функциональным, это не оптимальное решение.

Функция map() в Python

Карта

Чтобы получить такой же рабочий, но при этом более оптимальный результат, давайте используем функцию map() .

Будем работать с тем же списком — list_of_strings = [«5», «6», «7», «8», «9», «10»] . А для преобразования списка строк в список целых чисел воспользуемся функцией Python map() :

result = map(int,list_of_strings) print(list(result))

Если вы запустите этот пример, вы получите результат, аналогичный полученному при помощи цикла for .

Прежде чем мы выясним, почему функция map() в Python более оптимальна, чем использование цикла for , давайте разберемся с тем, что мы только что сделали.

По сути, мы лишь создали переменную, хранящую список строк, которые мы хотим преобразовать в числа.

result = map(int, list_of_strings)

Давайте разберем, как работает приведенный выше код. Синтаксис функции map() в Python следующий:

map (функция, итерируемый объект)

map() — это просто имя функции, здесь ничего особенного.

Первым аргументом функция map() принимает другую функцию. В приведенном выше примере кода мы использовали функцию int . Мы могли бы использовать другую встроенную функцию, скажем, len() , или создать нашу собственную функцию и использовать ее здесь.

Вторым аргументом для map() идет сам итерируемый объект. В нашем примере это список list_of_strings . Наш преобразованный список мы запишем в переменную result .

Перейдем к последней строке кода. Опять же, будем работать изнутри:

print(list(result))

list() принимает наши недавно преобразованные итерируемые элементы и сообщает компьютеру, что эти элементы являются частью списка. print() выводит наш новый список.

Что при использовании функции map() происходит под капотом?

Вместо перебора каждого члена списка строк функция map() преобразовала весь список строк в список чисел. Вы сэкономили память, и ваш код сработал быстрее. Поставленная задача выполнена наиболее оптимальным способом.

Заключение

Наконец, функция map() более элегантна, чем цикл for . Она помогает быстрее скомпилировать код. Также использование функции map() поможет вывести ваши навыки программирования на новый уровень и стать более «подкованным» программистом.

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

Примечание редакции Pythonist. Если хотите почитать более подробный материал о функции map() , можем предложить небольшой цикл статей:

  1. Знакомство с map() в Python
  2. Преобразование итераций строк и чисел с помощью map()
  3. Комбинирование map() с другими инструментами и кодинг в стиле Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *