Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Використання map() та Спискових Включень | Підвищення Продуктивності За Допомогою Вбудованих Інструментів
Техніки Оптимізації в Python

bookВикористання map() та Спискових Включень

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

Почнемо з потужних інструментів, таких як функція map() та генератори списків (list comprehensions), які можуть суттєво прискорити ваш код. Оскільки генератори списків більш оптимізовані для продуктивності, а map() реалізовано на C, вони зазвичай виконуються швидше, ніж вручну написані цикли.

Генератори списків

Генератори списків пропонують більш лаконічний та часто швидший спосіб створення списків порівняно з традиційними циклами for. Крім того, вони можуть зробити ваш код легшим для читання та розуміння.

Порівняймо продуктивність циклу for та генератора списків, згенерувавши список, де кожне число від 1 до 10000000 множиться на 2:

123456789101112131415161718192021
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
copy

Використання map()

Функція map застосовує вказану функцію до кожного елемента ітерованого об'єкта (наприклад, списку).

Окрім більшої лаконічності порівняно з написанням циклів, вона часто працює швидше завдяки оптимізаціям на рівні C у своїй реалізації, що зменшує накладні витрати на повторювані виклики функцій.

Хоча map може забезпечити певні переваги у продуктивності, особливо при роботі з вбудованими функціями, різниця у швидкості порівняно зі списковими включеннями часто незначна. Обидва підходи високоефективні, і для простих операцій перевага map майже непомітна. На практиці вибір між ними слід робити, орієнтуючись більше на читабельність та конкретні випадки використання, наприклад, ефективність використання пам'яті з map.

Порівняємо продуктивність map, циклів for та спискових включень при форматуванні 1000000 імен клієнтів у формат з великої літери (наприклад, 'john doe' -> 'John Doe'):

1234567891011121314151617181920212223242526
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
copy

Як і очікувалося, цикл for є найповільнішим підходом з трьох. У цьому прикладі map виявився швидшим за спискове включення, хоча на практиці продуктивність може змінюватися залежно від конкретного випадку використання. Іноді спискові включення навіть перевершують map, особливо для простіших виразів.

question mark

Яке з наступних тверджень щодо спискових включень та map() є правильним?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

Can you explain how the timeit_decorator works in these examples?

What are the main advantages of using map over list comprehensions?

When should I choose a for loop instead of map or list comprehensions?

Awesome!

Completion rate improved to 7.69

bookВикористання map() та Спискових Включень

Свайпніть щоб показати меню

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

Почнемо з потужних інструментів, таких як функція map() та генератори списків (list comprehensions), які можуть суттєво прискорити ваш код. Оскільки генератори списків більш оптимізовані для продуктивності, а map() реалізовано на C, вони зазвичай виконуються швидше, ніж вручну написані цикли.

Генератори списків

Генератори списків пропонують більш лаконічний та часто швидший спосіб створення списків порівняно з традиційними циклами for. Крім того, вони можуть зробити ваш код легшим для читання та розуміння.

Порівняймо продуктивність циклу for та генератора списків, згенерувавши список, де кожне число від 1 до 10000000 множиться на 2:

123456789101112131415161718192021
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator numbers = list(range(1, 10000001)) @timeit_decorator(number=3) def list_comprehension(): return [x * 2 for x in numbers] @timeit_decorator(number=3) def for_loop(): result = [] for x in numbers: result.append(x * 2) return result list_1 = list_comprehension() list_2 = for_loop() print(list_1 == list_2)
copy

Використання map()

Функція map застосовує вказану функцію до кожного елемента ітерованого об'єкта (наприклад, списку).

Окрім більшої лаконічності порівняно з написанням циклів, вона часто працює швидше завдяки оптимізаціям на рівні C у своїй реалізації, що зменшує накладні витрати на повторювані виклики функцій.

Хоча map може забезпечити певні переваги у продуктивності, особливо при роботі з вбудованими функціями, різниця у швидкості порівняно зі списковими включеннями часто незначна. Обидва підходи високоефективні, і для простих операцій перевага map майже непомітна. На практиці вибір між ними слід робити, орієнтуючись більше на читабельність та конкретні випадки використання, наприклад, ефективність використання пам'яті з map.

Порівняємо продуктивність map, циклів for та спискових включень при форматуванні 1000000 імен клієнтів у формат з великої літери (наприклад, 'john doe' -> 'John Doe'):

1234567891011121314151617181920212223242526
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator customer_names = ['john doe', 'jane smith', 'alex johnson', 'ivan smith'] * 250000 @timeit_decorator(number=10) def map_function(): return list(map(str.title, customer_names)) @timeit_decorator(number=10) def list_comprehension(): return [name.title() for name in customer_names] @timeit_decorator(number=10) def for_loop(): result = [] for name in customer_names: result.append(name.title()) return result formatted_with_map = map_function() formatted_with_comprehension = list_comprehension() formatted_with_for_loop = for_loop() print(formatted_with_map == formatted_with_comprehension == formatted_with_for_loop)
copy

Як і очікувалося, цикл for є найповільнішим підходом з трьох. У цьому прикладі map виявився швидшим за спискове включення, хоча на практиці продуктивність може змінюватися залежно від конкретного випадку використання. Іноді спискові включення навіть перевершують map, особливо для простіших виразів.

question mark

Яке з наступних тверджень щодо спискових включень та map() є правильним?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 3. Розділ 1
some-alt