2017-08-08 2 views
0

Je suis nouveau python, et je ne sais pas s'il est possible de faire tourner ma structure de la pile.(Python) En utilisant pop en python pour prendre premier élément imprimer puis le mettre au bas de la liste

Mon code:

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() 

Ce que je suis en train de faire est de personnaliser la pop dans une pile de pop et de placer la variable pape à la fin de la pile comme ce qui suit:

True 

False 

Bob 
6 
dog 
4 

Bob 

6 
dog 
4 
Bob 

mais je suis obtenir ceci:

True 

False 

Bob 
6 
dog 
4 

Bob 

6 
dog 
4 

aide?

+2

Si vous faites cela, ce n'est pas une pile plus. – user2357112

+0

Mais une liste ne fonctionne pas dans ma connaissance parce que vous devez faire pivoter tous les éléments afin que la pile ne le soit pas déjà? – Asilver

+1

"Mieux" de quelle manière? Tu ne fais que réinventer une bague. Notez également que votre ** Stack ** * est * une liste - vous n'enregistrez aucun traitement. – Prune

Répondre

3

pop a déjà une signification particulière dans les structures de données; Si vous changez l'opération, vous aurez des problèmes de communication plus tard. Au lieu de cela, nommez l'opération de ce qu'elle est: rotate.

Étant donné que la structure sous-jacente est simplement une liste, vous pouvez le faire assez facilement avec des tranches:

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

Mise à jour après les commentaires

Je ne sais pas comment vous le feriez besoin une pour la boucle. Python a beaucoup d'opérations et de méthodes intégrées pratiques pour éviter de telles difficultés. Si vous êtes à l'aise avec l'apprentissage de plusieurs structures de données sans aucun doute prendre suggestion d'Aaron et en apprendre davantage sur le paquet collections. Il existe des dictionnaires avec des propriétés de comptage et de tri, des types de séquences liées à une liste et de nombreuses capacités de support.

+0

Liam encore nouveau à cela, mais mon professeur fait paraître ud de cause impossible ont besoin d'une boucle et j'étais confus donc je pensais qu'une pile ferait – Asilver

+1

Vous devriez ajouter que 'collections.deque' a une méthode rotate –

+0

@AaronHall: oui , deque (Double-Ended QUEue) a une méthode 'rotate'. C'est bon pour un * vrai * étirement dans l'apprentissage en ce moment. Je voulais simplement rester simple. – Prune