Оценить:
 Рейтинг: 0

Оптимизация в Python

Год написания книги
2023
Теги
<< 1 2 3 4 5 6 7 8 ... 17 >>
На страницу:
4 из 17
Настройки чтения
Размер шрифта
Высота строк
Поля

# Создадим больой список

big_list = list(range(1000000))

# Измерим время выполнения операции добавления элемента в начало списка

def list_insert():

big_list.insert(0, 999)

# Измерим время выполнения операции добавления элемента в начало двусторонней очереди

def deque_appendleft():

dq = deque(big_list)

dq.appendleft(999)

# Измерим время выполнения для списка

list_time = timeit.timeit(list_insert, number=1000)

print(f"Добавление в начало списка заняло {list_time:.6f} секунд")

# Измерим время выполнения для двусторонней очереди

deque_time = timeit.timeit(deque_appendleft, number=1000)

print(f"Добавление в начало двусторонней очереди заняло {deque_time:.6f} секунд")

```

Этот код измеряет время выполнения операции добавления элемента в начало списка и двусторонней очереди по 1000 раз и выводит результат. Вы увидите, что двусторонняя очередь (`deque`) значительно эффективнее при таких операциях, потому что она оптимизирована для добавления и удаления элементов в начале и конце.

Результат будет зависеть от производительности вашей системы, но обычно вы увидите, что добавление элемента в начало `deque` будет выполняться намного быстрее, чем в обычном списке. `deque` оптимизирована для таких операций, и вы должны увидеть значительное ускорение по сравнению с обычным списком.

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

3. Модуль `itertools`

Модуль `itertools` в Python предоставляет множество функций, которые упрощают создание и обработку итераторов. Это может быть очень полезным при работе с большими наборами данных и выполнении итераций. Далее некоторые из наиболее полезных функций из этого модуля:

– `itertools.count(start, step)`: Эта функция создает бесконечный итератор, который генерирует числа, начиная с `start` и увеличиваясь на `step` с каждой итерацией.

– `itertools.cycle(iterable)`: Создает бесконечный итератор, который бесконечно повторяет элементы из `iterable`.

– `itertools.repeat(elem, times)`: Создает итератор, который возвращает элемент `elem` `times` раз.

– `itertools.chain(iterable1, iterable2, …)`: Объединяет несколько итерируемых объектов в один длинный итератор.

– `itertools.islice(iterable, start, stop, step)`: Возвращает срез итерируемого объекта, начиная с `start` и заканчивая до `stop` с шагом `step`.

– `itertools.filterfalse(predicate, iterable)`: Возвращает элементы итерируемого объекта, для которых функция `predicate` возвращает `False`.

– `itertools.groupby(iterable, key)`: Группирует элементы из итерируемого объекта на основе функции `key`.

– `itertools.product(iterable1, iterable2, …)`: Возвращает декартово произведение нескольких итерируемых объектов.

Давайте рассмотрим пример применения модуля `itertools` для оптимизации и измерения производительности кода. Предположим, у нас есть два больших списка, и мы хотим найти пересечение (общие элементы) между ними. Мы можем использовать модуль `itertools` для этой задачи:

```python

import timeit

import itertools

# Создадим два больших списка

list1 = list(range(100000))

list2 = list(range(50000, 150000))

# Измерим время выполнения операции поиска пересечения с использованием цикла

def find_intersection_with_loop():

intersection = []

for item in list1:

if item in list2:

intersection.append(item)

# Измерим время выполнения операции поиска пересечения с использованием itertools

def find_intersection_with_itertools():

intersection = list(itertools.filterfalse(lambda x: x not in list2, list1))

# Измерим время выполнения для поиска с использованием цикла

loop_time = timeit.timeit(find_intersection_with_loop, number=100)

print(f"Поиск с использованием цикла занял {loop_time:.6f} секунд")

# Измерим время выполнения для поиска с использованием itertools

itertools_time = timeit.timeit(find_intersection_with_itertools, number=100)
<< 1 2 3 4 5 6 7 8 ... 17 >>
На страницу:
4 из 17