首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stacks iteration python3

Stacks iteration python3
EN

Stack Overflow用户
提问于 2013-02-05 04:16:34
回答 1查看 928关注 0票数 0

好的,我试着在堆栈中输入一个单词,我想在输入一个字符串后打印所有的单词。所以我一次只能打印一个。我尝试在外部使用for循环,但堆栈显然是不可迭代的。所以我在堆栈中迭代它。它仍然不起作用。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-05 04:29:40

给你的Stack类一个__len__ method,这将使测试堆栈是否为空变得更容易:

代码语言:javascript
复制
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() (没有参数)中再次从列表的末尾删除。

要使您的类成为an iterable type,您至少需要添加一个__iter__ method,也可以选择与一个.__next__() method一起添加

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14694834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档