Python3中的栈迭代

0 投票
1 回答
963 浏览
提问于 2025-04-17 14:44

好的,我想把一个单词放进一个栈里,然后在输入一个字符串后把所有的单词打印出来。不过我只能一次打印一个。我试着在外面用一个循环,但栈似乎不能直接遍历。所以我在栈里面进行遍历,但还是不行。

class Stack:

    def __init__(self):
        self.items = []
    def push(self,items):
        self.items.insert(0,items)
    def pop(self):
        for x in self.items:
            print( self.items.pop(0))

    def show(self):
        print (self.items)

s = Stack()
s.show()
placed = input("enter")

item = s.pop()
print(item, "is on top", s)

1 个回答

0

给你的 Stack 类添加一个 __len__ 方法,这样可以更方便地检查栈是否为空:

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

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

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

    def show(self):
        print (self.items)

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

stack = Stack()

stack.push('World!')
stack.push('Hello')

while stack:  # tests the length through __len__
    print(stack.pop())

注意,我只是把元素用 .append() 方法加到 .items 列表的末尾,然后再用 .pop() 方法(不带参数)从列表的末尾移除元素。

为了让你的类变成 可迭代类型,你至少需要添加一个 __iter__ 方法,可以选择再加一个 .__next__() 方法

class Stack:
    # rest elided

    def __iter__(self):
        return self

    def next(self):
        try:
            return self.items.pop()
        except IndexError:  # empty
            raise StopIteration  # signal iterator is done

撰写回答