我们想在链接列表中找到一个项目,对该项目做些什么,然后将其删除。
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)
,因为我们已经在链接列表中找到了客户,但是我担心它可能遍历整个链接列表。
正确的方法是什么?
答案 0 :(得分:0)
它正在遍历列表。
如果您想要具有这种功能的链表,请不要使用collections.deque
。 collections.deque
是双端队列类型,而不是链表类型。它在后台使用了展开的链表,但不支持所有可能的链表功能。通过实现展开的方式,它甚至不能支持您想要的操作-implementation使用64个元素的块,并且不支持部分为空的中间块,因此,如果不将操作一直拖到列表的末端之一,就无法从中间删除元素。
对于您的数据结构而言,链表似乎并不是一个不错的选择。看起来更像是一份字典。