当我将项目附加到二维列表时,它不会添加到同一列表

问题描述 投票:0回答:4
class PriorityQueue:
    def __init__(self):
        self.q = []

    def enqueue(self, priority, item):
        self.q.append([priority, item])
        self.q = sorted(self.q)
        return self.q


x = PriorityQueue()
print(x.enqueue(3, "Potato"))

y = PriorityQueue()
print(y.enqueue(1, "Egg"))

我正在尝试列出优先级列表,但它无法排序。

输出;

[[3, 'Potato']]
[[1, 'Egg']]

我该如何解决这个问题?

python class data-structures priority-queue
4个回答
2
投票

你总是在创建一个新的

PriorityQueue
,我猜你想要一个队列:

class PriorityQueue:

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

    def enqueue(self, priority, item):
        self.q.append([priority, item])
        self.q = sorted(self.q)
        return self.q


y = PriorityQueue()
print(y.enqueue(3, "Egg"))
print(y.enqueue(4, "Potato"))
print(y.enqueue(2, "Chesse"))
print(y.enqueue(1, "Cake"))

出:

[[3, 'Egg']]
[[3, 'Egg'], [4, 'Potato']]
[[2, 'Cheese'], [3, 'Egg'], [4, 'Potato']]
[[1, 'Cake'], [2, 'Cheese'], [3, 'Egg'], [4, 'Potato']]

0
投票

在此代码中,您有一个类 ->

PriorityQueue
,它继承了一个列表
"q"
。 现在,代码创建了两个类型为
PriorityQueue
x 和 y 的对象,它们彼此独立。 这也意味着它们各自的列表
"q"
是彼此独立的。

测试下面的代码。会让整个过程更加生动

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

    def enqueue(self, priority, item):
        self.q.append([priority, item])
        self.q = sorted(self.q)
        return self.q


grocerys = PriorityQueue()
print(grocerys.enqueue(3, "Potato"))
print(grocerys.enqueue(6, "Milk"))
print(grocerys.enqueue(1, "Egg"))

print("this is your grocery.q list", grocerys.q)

media = PriorityQueue()
print(media.enqueue(1, "PC"))
print(media.enqueue(3, "Television"))
print(media.enqueue(2, "Moonboard"))
print("this is your media.q list", media.q)

0
投票

您有 2 个独立的对象。你正在排队这两个对象。这就是为什么你会得到单独的队列,这并不奇怪。

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

    def enqueue(self, priority, item):
        self.q.append([priority, item])
        self.q.sort(key=lambda x:x[0])
        return self.q


x = PriorityQueue()
print(x.enqueue(3, "Potato"))
print(x.enqueue(1, "Egg"))

输出:

[[3, 'Potato']]
[[1, 'Egg'], [3, 'Potato']]

您一次又一次地对列表进行排序。这不是实现优先级队列的正确方法。更好的方法是使用堆。

这是一个示例:

import heapq
h = []
h.append([3, "Potato"])
h.append([1, "Egg"])

heapq.heapify(h)
print(h)

输出:

[[1, 'Egg'], [3, 'Potato']]

要从堆中弹出,您可以使用

heapq.heappop(h)
等。查看 docs 了解更多信息。


0
投票
class PriorityQueue:
    def __init__(self):
        self.items = []

    def size(self):
        return len(self.items)

    def enqueue(self, item):
        self.items.append(item)
        self.items.sort()

    def dequeue(self):
        if self.size() == 0:
            return None
        return self.items.pop(0)


    def __repr__(self):
        return f"{[item for item in self.items]}"


if __name__ == '__main__':
    q = PriorityQueue()
    q.enqueue([3, "Potato"])
    q.enqueue([1, "Egg"])

    print(q)

    item_to_process = q.dequeue()
    print(item_to_process)

结果

[[1, Egg], [3, Potato]]

[1, 'Egg']
© www.soinside.com 2019 - 2024. All rights reserved.