python中的优先级队列获取值

时间:2019-03-15 02:23:00

标签: python priority-queue

我是新来的。 我使用一个优先级“ queue”,它在到达和离开事件中有两种类型,可以在代码中随机实例化。我需要检查生成的最低值,并使用“ queue.get”未给出的值来检查它是否与“ A”或“ D”相关联。

class PriorityQueue(object):
    def __init__(self):
        self.queue = []

    def __str__(self):
        return ' '.join([str(i) for i in self.queue])

        # for checking if the queue is empty

    def isEmpty(self):
        return len(self.queue) == []

        # for inserting an element in the queue

    def insert(self, data):
        self.queue.append(data)

        # for popping an element based on Priority

    def delete(self):
        try:
            max = 0
            for i in range(len(self.queue)):
                if self.queue[i] < self.queue[max]:
                    max = i
            item = self.queue[max]
            del self.queue[max]
            return item
        except IndexError:
            print()
            exit()


if __name__ == '__main__':


    queue = PriorityQueue()

    Arrival = int(random.expovariate(1/15))
    Departure = randint(15, 45)

    queue.insert((Arrival, 'A'))
    queue.insert((Departure, 'D'))

    Arrival = int(random.expovariate(1/15))
    Departure = randint(15, 45)

    queue.insert((Arrival, 'A'))
    queue.insert((Departure, 'D'))

    Arrival = int(random.expovariate(1/15))
    Departure = randint(15, 45)

    queue.insert((Arrival, 'A'))
    queue.insert((Departure, 'D'))

    Arrival = int(random.expovariate(1/15))
    Departure = randint(15, 45)

    queue.insert((Arrival, 'A'))
    queue.insert((Departure, 'D'))

    Arrival = int(random.expovariate(1/15))
    Departure = randint(15, 45)

    queue.insert((Arrival, 'A'))
    queue.insert((Departure, 'D'))

    print(queue)

    while not queue.isEmpty():
        print(queue.delete())

    queue = Variaveis()

最后,我应该在'if'的帮助下打印A和D的值。

1 个答案:

答案 0 :(得分:0)

我不太明白你的问题。

您为什么需要从随机导入randint中随机导入? 由于您只使用随机模块中的2个功能,因此

queue = Variaveis()

如上所述

(0, 'A') (43, 'D') (3, 'A') (40, 'D') (8, 'A') (15, 'D') (7, 'A') (26, 'D') (15, 'A') (25, 'D')
(0, 'A')
(3, 'A')
(7, 'A')
(8, 'A')
(15, 'A')
(15, 'D')
(25, 'D')
(26, 'D')
(40, 'D')
(43, 'D')

抛出一个错误,所以我忽略了它,因为在这种情况下似乎无关紧要。

一个示例结果是:

queue.insert((Arrival, 'A'), (Departure, 'D'))

排除列表的第一行显然按一对中的最大值排序。 如果您想匹配A和D,我建议

    $ pytest

我还建议您看一下list.sort()函数和其他有用的列表操作here