gpt4 book ai didi

python,泛型函数

转载 作者:行者123 更新时间:2023-12-01 05:56:49 25 4
gpt4 key购买 nike

如何在Python中创建通用堆栈?我在 python 中的堆栈实现:

class Node(object):
def __init__(self, d):
self.data = d
self.nextNode = None

class Stack(object):
def __init__(self):
self.top = None

def push(self, item):
newNode = Node(item)
newNode.nextNode = self.top
self.top = newNode

def pop(self):
if self.top == None:
return None
item = self.top.data
self.top = self.top.nextNode
return item

现在我正在放置 Node 类的对象,但是如何实现通用 Stack 以便我可以在那里放置任何东西。例如,如果我想创建新类型的节点

class NodeWithMin:
def __init__(self, value, minval):
self.data = value
self.minval = minval

并且能够基于这些类型的节点创建堆栈,所以它应该是这样的(当然它不起作用):

class StackWithMin(qs.Stack):
def push(self, val):
if self.peek() != None:
minval = min(self.peek().value, val)
else:
minval = val
qs.Stack.push(NodeWithMinV2(val, minval))

有什么想法吗?

编辑:它不起作用,因为我有下一个错误:

unbound method push() must be called with Stack instance as first argument (got NodeWithMinV2 instance instead)

我错过了自己

最佳答案

你可以只使用一个列表,但我完全理解你可能想要更好的抽象。

您还可以在集合模块中使用双端队列。它可以从任意一端添加或删除,并且比列表更好地抽象。

你的东西看起来不错。如果您想在其中放入最小值,只需创建一个新类,并将其实例作为 item 参数传递到您的 Push 方法中。

我在这里猜测,但如果你想要的是一个优先级队列,你可以在其中弹出值(value)最低的节点,而不仅仅是按时间顺序推送给定端的节点,你可以查看 heapq 模块。它也不是非常抽象,但它有效,而且速度很快,没有什么可以阻止您自己更好地抽象它。

关于python,泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com