【问题标题】:Find same values in two huge datasets在两个巨大的数据集中找到相同的值
【发布时间】:2018-11-15 15:02:22
【问题描述】:

我有一个包含大约 2 000 行的列表 [UnixTimestamp, Value01, Value02](它以 JSON 的形式出现),我还有另一个包含几百万行的列表 [UnixTimestamp, Value01, Value02](它以 . csv)我想弄清楚较小列表中的每个元素是否在第二个列表中具有相同值的元素。 两个列表都按时间戳排序

最简单的方法显然是这样的:

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

但这有意义还是有更有效的方法?

谢谢

【问题讨论】:

  • UnixTimestamp,Value01,Value02之间有关系吗?
  • 您可以尝试提供两个数据集的缩减版本以帮助编写解决方案。一般来说,两个列表列表可以变成两组元组,然后计算集合交集。

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


【解决方案1】:

如果它们只是列表,您可以尝试这样的方法。

set(small_list) & set(big_list)

转换为set 将删除重复值,您可以使用& 运算符比较并返回两组相同的值。

【讨论】:

  • 好主意,谢谢。数据还没有出现在列表中,但我计划出于这个原因对其进行格式化。
  • 转换为集合不起作用,因为我猜列表实际上包含列表。
  • 这个时间复杂度是多少?
【解决方案2】:

两者都已按时间戳排序,因此请充分利用它:

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

【讨论】:

    猜你喜欢
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多