簡體   English   中英

collections.deque:一旦找到,如何有效地刪除項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM