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

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

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

Введение

Множества являются наиболее недооцененной структурой данных, так как большинство разработчиков 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 секунд

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

Заключение

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

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

Егор Егоров

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

Ссылка на мой github есть в шапке. Залетай.

Оцените автора
Егоров Егор
Добавить комментарий