【问题标题】:Python (2.7) Queue DuplicatesPython (2.7) 队列重复
【发布时间】:2014-02-19 19:25:31
【问题描述】:

我正在尝试为一个简单的网络爬虫创建一个包含 url 字符串的队列。我不想将重复的项目添加到队列中,因此我创建了一个辅助函数来检查要添加到队列中的 url 并查看它是否已经在其中。我试图使用这段代码(我从一个类似的stackoverflow问题修改),页面是队列:

def is_in_url_list(self, url):
    return url in self.pages.queue

但是,我似乎无法让它发挥作用。即使我传递了应该返回 true 的东西,它也会返回 false。有没有更好的方法来解决这个问题?谢谢!

【问题讨论】:

标签: python queue duplicates


【解决方案1】:

出于您的目的,使用queue 没有任何意义,您可以将普通的listlist.popleft() 一起使用,或者您可以使用collections.deque。如果您好奇,queue 用于多处理,因为它提供了一个线程安全的数据结构,不同的线程可以使用它进行通信(如果这对您来说听起来像胡言乱语,请忽略它)

由于您描述的问题是一个常见问题,我提供的链接实际上显示了如何将列表用作堆栈和队列。

现在,deque 是一个双端队列,因此是 d。这可以从两端弹出,在需要时成为堆栈,在需要时成为队列。

现在您可能想知道,如果dequelist 可以达到相同的结果,为什么要使用另一个,文档中也对此进行了解释:

虽然列表对象支持类似的操作,但它们已针对 快速固定长度操作并产生 O(n) 内存移动成本 pop(0) 和 insert(0, v) 操作同时改变大小和 底层数据表示的位置。

现在选择权在你手中。

【讨论】:

  • 这很有帮助,谢谢!我对 python 还很陌生,我没有意识到双端队列是正确的选择。现在完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2013-12-18
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2016-10-30
相关资源
最近更新 更多