IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

pile et file sous python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut pile et file sous python
    Salut;
    Comment declare-t-on une pile et une file sous python
    comment empiler et depiler ? enfiler et defiler ?
    merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Il n'y a pas de type pile ou file à proprement parler, mais il est facile d'utiliser une liste pour cela.
    Par exemple:
    pile = [1,2,3]
    Empiler x => pile.append(x)
    Dépiler => pile.pop()

    file = [1,2,3]
    Enfiler x => file.append(x)
    Défiler => file.pop(0)

    Mais il y a d'autres façons de faire.

    Il existe bien une classe Queue dans le module du même nom, mais elle sert plutôt à communiquer entre threads...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    merci de ta reponse dividee
    dans ton exemple , il n'y a pas de difference entre une pile et une file ?
    et aussi comment faire pour respecter les priorités ?
    merci
    Edit: je pense avoir compris :
    c'est dans le depilage :
    l.pop() pour une pile
    et l.pop(0) pour une file

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Simulation d'une pile avec une liste:

    Déclaration:

    Empilage de 'toto':

    Dépilage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x=pile[-1]
    del pile[-1]
    Ça, c'était une pile lifo, pour une pile fifo, il suffit de retirer le 1er élément (indice 0):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x=pile[0]
    del pile[0]
    Je ne sais pas ce que tu entends par "file": tu pourrais préciser?

    Tyrtamos

    [edit]: encore grillé... mais c'est lui qui a raison: pop est mieux

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    merci tyrtamos de ta reponse

    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Je ne sais pas ce que tu entends par "file": tu pourrais préciser?

    Tyrtamos
    c'est ce que tu appelles " pile fifo "( comme une file d'attente)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    peut on utiliser des listes chainnées ?
    j'ai defini la classe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Noeud:
        def __init__(self,valeur,suivant):
            self.val=valeur
            self.suiv=suivant
        def __repr__(self):
            return "Noeud de Valeur "+str(self.val)
    avec ca on peut peut etre creer des files et des piles ?

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Une idée de solution à adapter:

    Dans une liste python, chaque élément peut être n'importe quoi, et pourquoi pas une liste.

    Si l'élement est une liste, elle peut contenir l'indice de l'élément suivant en plus d'une valeur. On doit donc pouvoir chainer ces sous-listes dans un ordre différent de la liste de base.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L=[[3,'titi'],[0,'toto'],[None,'tutu'],[2,'tata']]
    Dans cet exemple simpliste, le 1er élément est L[1] (il faut le mémoriser dans une autre variable), qui renvoie à L[0], puis à L[3], puis enfin à L[2] qui est le dernier élément à qui on a attribué un suivant "None" qui peut être testé.

    Mais, bon, gérer une pile avec cette liste chainée ne sera pas facile à coder...

    Tyrtamos

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 56
    Par défaut
    on peut aussi definir les deux classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class noeudPile:
         def __init__(self,arbre,suivant=None)
               self.arbre=arbre
               self.suiv=suivant
    et pour les arbres binaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class noeudArbre:
        def __init__(self,valeur,gauche,droite):
            self.val=valeur
            self.filsgauche=gauche
            self.filsdroit=droite
        def __repr__(self):
            return "Noeud de valeur "+str(self.val)
    maintenant le plus dur est de definir les operations sur ces nouveaux objets

    a suivre ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Midi sous Python
    Par pfeuh dans le forum Général Python
    Réponses: 1
    Dernier message: 14/11/2006, 11h45
  2. [File] comment python gere les encodage?
    Par anthyme dans le forum Général Python
    Réponses: 3
    Dernier message: 03/10/2006, 20h39
  3. Dossier temporary internet files sous Mac?
    Par keishah dans le forum Dépannage et Assistance
    Réponses: 6
    Dernier message: 06/09/2006, 21h57
  4. Fonction addslashes sous Python ?
    Par ecocentric dans le forum Général Python
    Réponses: 2
    Dernier message: 28/01/2006, 18h27
  5. Existe-t-il un rad sous python?
    Par sloshy dans le forum EDI/RAD
    Réponses: 6
    Dernier message: 03/10/2005, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo