Функция map int python

Функция map. Примеры ее использования

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

Вначале я приведу простой пример использования функции map() для преобразования строк чисел в обычные числа:

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

Вернемся к нашей программе и ниже дважды вызовем функцию next() для итератора b:

В консоли видим первые два преобразованных значения. Давайте переберем все их с помощью цикла for:

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

Мы также легко можем сохранить результат преобразования в новом списке, используя функцию list():

Здесь функция list() автоматически перебрала итератор, неявно вызывая функцию next(), и сформировала соответствующие значения списка.

Этот же результат можно получить, используя генератор списка, следующим образом:

a = [int(x) for x in ['1', '2', '3', '5', '7']] print(a)

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

А вот эквивалентный генератор:

a = (int(x) for x in ['1', '2', '3', '5', '7'])

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

Далее, кроме функции list() мы также с итератором можем применять некоторые другие функции, которые в качестве аргумента принимают итерированный объект, например:

Но, если следом попытаться перебрать итератор еще раз:

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

Вместо функции sum() можно также использовать функции max() и min()

И другие, которые работают с итерируемыми последовательностями.

Конечно, вместо функции int() мы можем использовать любую другую, которая принимает один аргумент и возвращает некоторое значение. Например, можем взять список городов:

cities = ["Москва", "Астрахань", "Самара", "Уфа", "Смоленск", "Тверь"]

и применить к его элементам функцию len(), следующим образом:

b = map(len, cities) print(list(b))

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

Также мы можем применять к этим строкам их методы, например, переведем все в верхний регистр:

Мы здесь указали объект str и его метод upper(), который возвращает новую строку со всеми заглавными буквами.

Также мы можем определять и свои функции, используемые в map(). Как я уже отмечал, функция обязательно должна принимать один аргумент и возвращать некоторое значение, например, так:

def symbols(s): return list(s.lower())

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

(Обратите внимание, без круглых скобок, то есть, передаем ссылку на нее, а не вызываем). И после запуска программы увидим наборы вложенных списков из отдельных символов исходных строк.

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

b = map(lambda s: list(s.lower()), cities)

Результат будет прежним, а программа стала более простой и читабельной.

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

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

Ну и теперь, возвращаясь к уже знакомой нам конструкции:

s = map(int, input().split()) print(list(s))

(Я ее записал здесь в две строки, чтобы было понятнее.) Вы понимаете, как она работает. Здесь input().split() возвращает список из строк введенных чисел, к каждой строке применяется функция int() и с помощью функции list() генератор s превращается в список из чисел.

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

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

#66. Аннотация базовыми типами

#67. Аннотации типов коллекций

#68. Аннотации типов на уровне классов

#69. Конструкция match/case. Первое знакомство

#70. Конструкция match/case с кортежами и списками

#71. Конструкция match/case со словарями и множествами

#72. Конструкция match/case. Примеры и особенности использования

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

Источник

Читайте также:  Массив по диагонали java
Оцените статью