以列表效率方式搜索(嵌套列表)

search in list efficiency way (nested lis)

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

[["src_ip","src_port","dst_ip","dst_port"],["src_ip","src_port","dst_ip","dst_port"],
and so on
] 

一个更快的解决方案是使用 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 更改为 dict 并将 seen.add(tmp) 更改为 seen[tmp] = pos .生成的解决方案以线性时间运行(即 O(n),其中 n 是输入 lst 的大小)。这段代码在我的机器上花费了大约 250 毫秒,其中包含 4 个短随机字符串的 514000 sub-lists 个列表。