Рубрики
Без рубрики

Какой быстрее: список пометки или функции карты в Python?

Python Creator Guido Van Rossum не любит функцию карты (), потому что ее можно легко заменять на понимание списка, который не только быстрее, но также более читаемый и более читаемый и более читаемый. MAP () VS Появление списка Вот пример: (диапазон (10)) (карта (lambda x: x * x, xs))) list_2 = [X * X для X в XS] Печать (List_1 == … Какой быстрее: список пометки или функции карты в Python? Подробнее “

Автор оригинала: Chris.

Создатель Python Guido Van Rossum не нравится карта () Функция, потому что его можно легко заменить на Понимание списка который не только быстрее, но также более читаемый и короче.

MAP () VS Появление списка

Вот пример:

xs = list(range(10))

list_1 = list(map(lambda x: x*x, xs))
list_2 = [x*x for x in xs]

print(list_1 == list_2)
# True

Оба списка list_1 и list_2 Содержит те же данные: серия квадратных значений [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] .

Код показывает два способа достижения того же результата. Либо вы можете использовать карта (функция, список) и преобразовать результирующую карту объект в список или вы повторяете каждый элемент со списком пониманием. Оба направления приводят к одному и тому же результату, поэтому вывод является Правда Отказ

Таким образом, понимание списка более читаемо и короче. Но какой вариант быстрее?

Тема скорости: Функция карты VS Появление списка

Finxter Email курс член WLAD спросил меня следующий отличный вопрос:

«Какой из них быстрее от перспективы вычисления? Кстати: мне больше нравится второй, потому что это более явнее.

Давайте тестируем оба команда друг к другу с помощью удобных Python Время течения упаковка:

import timeit


xs = list(range(10))

exec_1 = 'list(map(lambda x: x*x, ' + str(xs) + '))'
exec_2 = '[x*x for x in ' + str(xs) + ']'

time_1 = timeit.timeit(exec_1, number=10000)
time_2 = timeit.timeit(exec_2, number=10000)

print("Latency (s) map function:\t" + str(time_1))
print("Latency (s) list comprehension:\t" + str(time_2))

'''
Latency (s) map function:	0.011982152000000024
Latency (s) list comprehension:	0.004821852999999987
'''

Попробуйте играть с кодом самостоятельно в нашей интерактивной оболочке Python:

Мы создаем два команда exec_1 и exec_2. . Первый – это Заявление о функции карты сверху кодовой фрагмент. Последнее это Версия по пониманию списка из этого. Мы выполняем в 100 000 раз.

Вывод показывает, что функция карты в 3 раза медленнее, чем утверждение понимания списка!

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

import timeit


xs = list(range(10000))

exec_1 = 'list(map(lambda x: x*x, ' + str(xs) + '))'
exec_2 = '[x*x for x in ' + str(xs) + ']'

time_1 = timeit.timeit(exec_1, number=10000)
time_2 = timeit.timeit(exec_2, number=10000)

print("Latency (s) map function:\t" + str(time_1))
print("Latency (s) list comprehension:\t" + str(time_2))

'''
Latency (s) map function:	8.007580283
Latency (s) list comprehension:	3.8910019489999996
'''

Хотя относительная разница между уменьшением, функция карты по-прежнему занимает в два раза длиннее утверждение по пониманию списка. Причина относительного улучшения функции карты заключается в том, что постоянный накладные расходы создания, управления и вызова карта () Функция уменьшается в важности, учитывая больший вес списка XS Размер с 10 000 элементов.

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

Оригинал: “https://blog.finxter.com/which-is-faster-list-comprehension-or-map-function-in-python/”