Быстрый способ сравнить несколько списков

Множества являются наиболее недооцененной структурой данных, так как большинство разработчиков Python часто используют их только для удаления дубликатов.

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

Однажды у меня была задача извлечь уникальные значения из двух разных список. Я неоднократно слышал от коллег, что использование циклов в таких задач замедляет код, и решил найти наиболее эффективный способ решить задачу. Накидал небольшой код для тестирования двух способов, чтобы сравнить скорость как множеств, так и генератора списков. Давайте посмотрим что получилось.

import numpy as np 
import time 

a = np.arange(0, 20000) 
b = np.arange(50, 20000)

Для генерации массивов будем использовать библиотеку numpy и метод arange. Здесь мы создаем два списка в диапазоне указанных чисел.

Ниже приведен код функции, которая будет тестировать генератор списков.

def test_comp():
    start = time.time()
    result = [i for i in a if i not in b]
    end = time.time()
    return str(end - start)[:-13] + ' секунд'

# выполнение функции
test_comp()
19.4699 секунд

На сравнение двух списков из 200000 элементов потребовалось почти 20 секунд, ниже будут результаты запуска функции сравнения множеств.

def test_sets():
    start = time.time()
    result = set.difference(set(a), set(b))
    end = time.time()
    return str(end - start)[:-13] + ' секунд'

# выполнение функции
test_sets()
0.0824 секунд

Честно говоря, результат меня сильно удивил, я ожидал что будет оптимизация, но на столько — не ожидал 🙂

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

Примечание: Наборы быстрее в таких сценариях, но когда дело доходит до итерации по их содержимому они медленнее чем списки.

close

Изучаешь Python?

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

Обязательно прочитайте другие статьи посвященные языку программирования Python


GeekUniversity - обучение до уровня Middle с гарантированным трудоустройством

Добавить комментарий

Ваш адрес email не будет опубликован