Функция map в Python. Как преобразовать элементы списка по функции. Python для начинающих 2023

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

Если было полезно, то подписывайся на меня. А также на мой телеграм канал - ссылка в профиле.

#shorts #short #shortvideo #python #pythontutorial #курушкин #программирование #kurushkin #mappython #map #питон #пайтон #языкипрограммирования #программированиеснуля #pythonдляначинающих #pythonдляновичков #python2023 #python2024
Рекомендации по теме
Комментарии
Автор

Не вводи людей в заблуждение говоря о памяти, в первом и во втором примере абсолютно идентично загружаются элементы списка, ключевое слово for активирует магический метод __iter__ класса list, а данный метод является генератором, у которого присутствует ключевое слово yield или через метод __next__

YutaHasler
Автор

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

АлексейЕгоров-ке
Автор

аххахаха, чел говорит о том, что с map будет производительнее. В данном примере лучше всего подошли бы генераторные включения, например list comprehentions они реально работают быстро

daark
Автор

2023 год на дворе. Зачем вызывать функцию для каждого элемента если через списковое включение можно сделать то же самое не вызывая функцию. Быстрее и читабельнее.

dima.kasper
Автор

Это можно сделать короче, если использовать лямбда функцию

_drivec
Автор

Два вопроса:
1. Почему бы не посмотреть в доки, уж у кого, а у питона доки такие, что какой-нить сишник или джавист обзавидуется наверное
2. С какого перепугу при работе со списком мы подгружаем за раз один элемент, а используя for сразу весь список? Я понимаю, если бы там был генератор соответствующий (хотя тогда и for грузил бы один элемент тоже за раз), но это же СПИСОК, он же целиком в функцию и уйдёт, ровно так же, как и в случае с for :)

nikolaymatveychuk
Автор

А что за клавиатура у тебя? Звук клавиш прикольный!

reshetnikAlex
Автор

Удачи работать с функциями, у которых больше чем 1 аргумент, или у которых есль ключевые параметры.

mitrotsky
Автор

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

Вашевеличество-йз
Автор

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

АлексейИркутский-ки
Автор

А если сравнить со списковым включением с лямбда функцией.? А не с обычным циклом?

ВиталинаСпиридонова-ощ
Автор

Если ты кодишь на гальке а вместо оперативки у тебя 4 негра то тогда да
Там разница почти невесомая, если ты делаешь нечто консольное по типу перебора введенных книг по страницам

Если ты работаешь с аналитикой и массивами по несколько сотен или тысяч элементов то да там это уже решает но и то несильно и используется sorted и лямбда функция

Если что не пинайте я больше по Джанго

Danyk-
Автор

javascript'ищики подобне знают) К слову и forEach, если есть в питоне, также на БОЛЬШИХ обьемах работает сильно заметно быстрее

mike.fireson
Автор

можно было через лямбду в одну строчку

cleontheseventeenth
Автор

а где реальный тест на скорость, а не просто слова о производительности?

sergey_
Автор

Можно же не только листы но и например строки

FTomboy
Автор

Ты не прав:
numbers = [*range(1_000_000)]


def square(number: int) -> int:
return number ** 2


def list_generator_square() -> list[int]:
return [square(x) for x in numbers]


def list_generator_vanilla() -> list[int]:
return [x ** 2 for x in numbers]


def map_lambda() -> list[int]:
return list(map(lambda x: x ** 2, numbers))


def map_square() -> list[int]:
return list(map(square, numbers))


> python -m timeit -s "from test_list import list_generator_square" "list_generator_square()"
2 loops, best of 5: 122 msec per loop
> python -m timeit -s "from test_list import list_generator_vanilla" "list_generator_vanilla()"
5 loops, best of 5: 76.9 msec per loop
> python -m timeit -s "from test_list import map_square" "map_square()"
2 loops, best of 5: 117 msec per loop
> python -m timeit -s "from test_list import map_lambda" "map_lambda()"
2 loops, best of 5: 117 msec per loop

Самый быстрый - лист генератор. Но замеры нужно проводить для каждой функции по отдельности
Ещё, ты не прав, что список не подгружается полностью при использовании мап. И в твоём и в моём примере, список целиком подгружается в память, а потом используются элементы по одному(во всех вариантах, будь то генератор или обычный for).
Меньше памяти это бы заняло, если бы ты использовал не объявленный список, а генератор, например range(в моём примере генератор уже распакован).

VaeVcts
Автор

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

maksismax
Автор

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

gaben_aTan
Автор

Сделал только один вывод: пайтон это эмулятор си, поэтому в нем все медлеенно, значит он говно. Современные программисты однако гурманы, разбираются во вкусах говна😂

АлександрСоколов-йфт