以列表效率方式搜索(嵌套列表)
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 个列表。
我有一个包含 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 个列表。