在两个庞大的数据集中找到相同的值

时间:2018-11-15 15:02:23

标签: python-3.x algorithm list search bigdata

我有一个大约有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 :(得分:1)

如果它们只是列表,则可以尝试类似的操作。

set(small_list) & set(big_list)

转换为set会删除重复的值,您可以使用&运算符比较并得出两个集合的相同值。

答案 1 :(得分:0)

两者均已按时间戳排序,因此可以利用它来发挥优势:

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))