[英]collections.deque: How to efficiently remove item once already located?
我們想在鏈表中找到一個項目,對這個項目做一些事情,然后刪除它。
from collections import deque
q = deque([(12, 'apples'), (32, 'oranges'), (42, 'pears'), (12, 'peaches')])
john_smith_id = 42
for customer in q:
id, data = customer
if id == john_smith_id:
myfunction(data) # do something with John Smith's data
q.remove(customer)
break
我的問題是關於q.remove(customer)
。 理想情況下,這應該是O(1)
因為我們已經在鏈表中找到了客戶,但我擔心它可能會遍歷整個鏈表。
這樣做的正確方法是什么?
它正在重新遍歷列表。
如果你想要一個具有這種功能的鏈表,不要使用collections.deque
。 collections.deque
是雙端隊列類型,而不是鏈表類型。 它在底層使用了一個展開的鏈表,但它並不支持所有可能的鏈表功能。 按照展開的實現方式,它甚至不能支持你想要的操作—— 實現使用了64個元素的塊,並且它不支持部分空的中間塊,所以沒有辦法從中間刪除一個元素沒有操作一直到列表的末尾之一。
無論如何,鏈表對於您的數據結構來說似乎不是一個很好的選擇。 它看起來更像是 dict 的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.