【问题标题】:Creating a list of stacks in python在python中创建堆栈列表
【发布时间】:2018-06-09 23:41:00
【问题描述】:

所以我正在尝试在 Python 中创建堆栈对象列表。我首先创建了一个 Stack 类,它具有 Stack 应该具有的简单方法。然后我创建了另一个名为 Stacks 的类。我正在尝试创建堆栈列表。如果堆栈有超过 3 个元素,它会创建一个新堆栈,但是当我尝试显示元素时出现错误。有人可以指出我在这里可能做错了什么吗?

class Stack:

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

    def isEmpty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

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

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

    def printStack(self):
        for item in reversed(self.items):
            print (item)


class Stacks:

    def __init__(self):
        self.stacks = []
        self.noOfStacks = 0
        self.itemsOnStack = 0

    def dev(self):
        self.stacks.append(Stack())
        # if len(self.stacks) != 0:
        #     self.noOfStacks += 1

    def push(self, item):
        if self.itemsOnStack > 3:
            self.dev()
        else:
            self.itemsOnStack += 1
            self.stacks[self.noOfStacks].push(item)

    def pop(self, stackNo):
        return self.stacks(noOfStacks).pop()

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

    def printtack(self, index):
        print (len(self.stacks(index)))
        self.stacks(index).printStack()


stacky = Stacks()
stacky.dev()
stacky.push(3)
stacky.printtack(0)

【问题讨论】:

  • 你遇到了什么错误?
  • 确保发布 Python 代码时缩进正确。否则,您将在代码中引入新问题。
  • FWIW,collections.deque可以作为栈使用,一般比使用列表快一点。

标签: python list object stack queue


【解决方案1】:

有一点需要注意,kshikama 说索引应该使用[] 而不是(),另一个问题是在堆栈类中使用len() 方法,你最常覆盖__len__() 方法或你已经给出了使用 size() 方法

class Stack:
    def __init__(self):
        self.items =  []

    def isEmpty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

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

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

    def printStack(self):
        for item in reversed(self.items):
            print (item)

class Stacks:
    def __init__(self):
        self.stacks = []
        self.noOfStacks = 0
        self.itemsOnStack = 0

    def dev(self):
        self.stacks.append(Stack())
        #if len(self.stacks) != 0:
            #self.noOfStacks += 1

    def push(self, item):

        if self.itemsOnStack > 3:
            self.dev()
        else:
            self.itemsOnStack += 1
            self.stacks[self.noOfStacks].push(item)


    def pop(self, stackNo):
        return self.stacks(noOfStacks).pop()

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

    def printtack(self, index):
        print (self.stacks[index].size())
        self.stacks[index].printStack()
stacky = Stacks()
stacky.dev()
stacky.push(3)
stacky.printtack(0)

输出

1
3

【讨论】:

  • 天哪,我真是个白痴,居然用 () 而不是 [] 作为索引。谢谢楼上大家的帮助。
【解决方案2】:

Python 中的索引列表通过 [] 而不是 () 工作。试试

 def printtack(self, index):
    self.stacks[index].printStack()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2021-04-06
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多