如何在推送新对象之前检查队列中是否存在对象

时间:2014-11-19 19:03:12

标签: python queue pydev

我正在使用Python队列:

q = Queue.Queue()

我使用q.put(item)将某个类的对象放入上述队列中。但是,在将项目放入队列之前,我想检查它是否已存在于队列中。有没有办法做到这一点? [没有取出队列中的所有对象然后将它们全部推回]

此外:

我不知道我怎么能真正看到我放入队列的变量(调试时)。我正在使用Pydev,我在variables窗口中看到的只有not_emptynot_full之类的东西。如何在运行时看到队列中的内容?

3 个答案:

答案 0 :(得分:10)

您可以将'q.queue'视为列表。

if item in q.queue:
   print("already there!")

答案 1 :(得分:1)

如果您愿意,可以为自己的班级提供此类机制。

class UniqueQueue:

    def __init__(self):
        self.__item_pool = []

    def push(self, item):
        if item not in self.__item_pool:
            self.__item_pool.append(item)

    def pop(self):
        return self.__item_pool.pop()

答案 2 :(得分:1)

您确定需要queue.Queue吗? queue.Queue是一个同步集合,因此提供的功能比大多数情况下所需的功能更多。

您可能希望使用queue.deque或使用this recipe来创建自己的OrderedSet

例如

q = queue.deque()
q.appendleft(1)
q.appendleft(2)
q.appendleft(3)
assert 2 in q
assert q.pop() == 1

在python 2中,queue模块名为Queue