(Python)在python中使用pop取第一个元素打印它,然后将其放在列表的底部

问题描述:

我是python的新手,我不知道是否可以旋转我的堆栈结构。(Python)在python中使用pop取第一个元素打印它,然后将其放在列表的底部

我的代码:

class Stack():  
    def __init__(self): 
     self.items = [] 
    def isEmpty(self): 
     return self.items == [] 
    def push(self, item): 
     return self.items.append(item) 
    def printstack(self): 
     for items in reversed(self.items): 
      print items 
    def pop(self): 
     NS=Stack() 
     var1=self.items.pop() 
     NS.push(var1)  
     NS.push(self) 
     self=NS 
     return var1 

    def size(self): 
     return len(self.items) 
s=Stack() 
print s.isEmpty() 
print '' 
s.push(4) 
s.push('dog') 
s.push(6) 
s.push('Bob') 
print s.isEmpty() 
print '' 
s.printstack() 
print '' 
print s.pop() 
print '' 
s.printstack() 

我所试图做的是自定义弹出堆栈中弹出并把教皇变量堆栈类似下面的结尾:

True 

False 

Bob 
6 
dog 
4 

Bob 

6 
dog 
4 
Bob 

但是我得到这个:

True 

False 

Bob 
6 
dog 
4 

Bob 

6 
dog 
4 

帮助?

+2

如果你这样做,它不再是一个堆栈。 – user2357112

+0

但是我的知识中列表不起作用,因为你必须旋转所有的元素,所以没有一个堆栈已经是一个更好的选择? – Asilver

+1

“更好”以什么方式?你只是重塑了一枚戒指。另外请注意,你的** Stack ** *是一个列表 - 你没有保存任何处理。 – Prune

pop在数据结构中已经有了独特的含义;如果您更改了操作,则稍后会出现通信故障。相反,请将操作命名为:rotate

由于底层结构是一个简单的列表,你可以用切片做到这一点很容易:

items = items[1:] + [items[0]] 

更新后评论

我不知道你会如何需要一个for循环。 Python有许多方便的内置操作和方法来避免这些困难。如果您对学习更多数据结构感到满意,绝对可以采用Aaron的建议并了解系列产品包。有字典与计数器和排序属性,链接列表类型的序列,以及很多良好的支持功能。

+0

感谢Liam对此仍然陌生,但我的教授似乎不可能因为你需要一个for循环,我很困惑,所以我认为一个堆栈会做 – Asilver

+1

你应该补充说'collections.deque'有一个循环方法 –

+0

@AaronHall:是,deque(Double-Ended Queue)有一个'rotate'方法。这对于现在的学习有很大的帮助。我只是保持简单。 – Prune