我有一個包含 514000 串列的嵌套串列。
我必須找到重復的串列并存盤它們的位置。
我寫了一個代碼,但是效率很差。514000*514000
你有一個很好的解決方案嗎?我的嵌套串列:
[["src_ip","src_port","dst_ip","dst_port"],["src_ip","src_port","dst_ip","dst_port"],
and so on
]
uj5u.com熱心網友回復:
一個更快的解決方案是使用 aset來跟蹤到目前為止已經看到的專案并將重復項的位置添加到串列中。因為串列不可散列,所以可以將它們轉換為元組。這是生成的代碼:
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為 adict并更改seen.add(tmp)為seen[tmp] = pos. 得到的解決方案以線性時間運行(即輸??入的大小在O(n)哪里)。這段代碼在我的機器上大約需要 250 毫秒,其中包含 4 個短隨機字串的 514000 個子串列。nlst
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/435996.html
下一篇:計算無窮大時,C#速度減慢30倍
