2017-08-08 169 views
0

我是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

回答

3

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

相關問題