代码之家  ›  专栏  ›  技术社区  ›  PersianGulf

列表高效搜索方法(嵌套lis)

  •  0
  • PersianGulf  · 技术社区  · 2 年前

    我有一个包含514000个列表的嵌套列表。
    我必须找到重复的列表并存储他们的位置。
    我写了一段代码,但效率不高。514000*514000
    你有一个有效的解决方案吗? 我的嵌套列表:

    [["src_ip","src_port","dst_ip","dst_port"],["src_ip","src_port","dst_ip","dst_port"],
    and so on
    ] 
    
    0 回复  |  直到 2 年前
        1
  •  2
  •   Jérôme Richard    2 年前

    一个更快的解决方案是使用 set 跟踪到目前为止已经看到的项目,并将重复项的位置添加到列表中。因为列表是不可哈希的,所以它们可以转换为元组。以下是生成的代码:

    seen = set()  # Unique items
    result = []   # List of duplicate positions
    for pos, item in enumerate(lst):
        tmp = tuple(item)
        if tmp in seen:
            result.append(pos)
        else:
            seen.add(tmp)
    

    如果要跟踪与找到的重复项关联的唯一项的位置,只需更改即可 seen a dict 和改变 seen.add(tmp) seen[tmp] = pos 所得解在线性时间内运行(即。 O(n) 哪里 n 是输入的大小 lst ). 在我的机器上,这段代码大约需要250毫秒,其中包含4个短随机字符串的514000个子列表。