Найти одинаковые значения в двух огромных наборах данных - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть список с примерно 2000 строк [UnixTimestamp, Value01, Value02] (это JSON), и у меня есть еще один список, который содержит несколько миллионов строк [UnixTimestamp, Value01, Value02] (это как. CSV) Я хочу выяснить, если каждый элемент в меньшем списке имеет элемент во втором списке с одинаковыми значениями. Оба списка отсортированы по отметке времени

Самый простой способ - это что-то вроде этого:

for x in small_List:
    if x in big_list:
        return True
    return False

Но имеет ли это смысл или есть более эффективный способ?

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Оба уже отсортированы по отметке времени, поэтому используйте это в своих интересах:

big_list_index = 0
for x in small_list:
    y = big_list[big_list_index]
    while big_list_index < len(big_list) and y.timestamp < x.timestamp:
        big_list_index += 1    
        y = big_list[big_list_index]
    while big_list_index < len(big_list) and y.timestamp == x.timestamp:
        if y.timestamp == x.timestamp and y.value01 == x.value01 and y.value02 == x.value02:
            return True
        else:
            big_list_index += 1 
            y = big_list[big_list_index]

Если временные метки уникальны, сложность составляет O (len (big_list) + len (small_List))

0 голосов
/ 15 ноября 2018

Если это просто списки, вы можете попробовать что-то вроде этого.

set(small_list) & set(big_list)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...