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 :

tri d'un tableau d'objet


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 491
    Par défaut tri d'un tableau d'objet
    Bonjour,

    J'ai un tableau d'objets qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [{'curve': <Element 'Curve' at 0x000000E5659A6770>, 'begin': '380270', 'end': '308078'}, 
    {'curve': <Element 'Curve' at 0x000000E565959630>, 'begin': '520046', 'end': '446574'}, 
    {'curve': <Element 'Curve' at 0x000000E56598E8B0>, 'begin': '402286', 'end': '402542'},
    {'curve': <Element 'Curve' at 0x000000E5659A64A0>, 'begin': '520558', 'end': '380270'}, 
    {'curve': <Element 'Curve' at 0x000000E5659A6EA0>, 'begin': '308078', 'end': '402286'}, 
    {'curve': <Element 'Curve' at 0x000000E565605C70>, 'begin': '446574', 'end': '520558'},]
    Je voudrais le trier de telle sorte que pour un élément donné, la valeur de 'end' soit égale à la valeur 'begin' de l'élément suivant.
    Ca donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [{'curve': <Element 'Curve' at 0x000000E565959630>, 'begin': '520046', 'end': '446574'}, 
    {'curve': <Element 'Curve' at 0x000000E565605C70>, 'begin': '446574', 'end': '520558'}, 
    {'curve': <Element 'Curve' at 0x000000E5659A64A0>, 'begin': '520558', 'end': '380270'}, 
    {'curve': <Element 'Curve' at 0x000000E5659A6770>, 'begin': '380270', 'end': '308078'}, 
    {'curve': <Element 'Curve' at 0x000000E5659A6EA0>, 'begin': '308078', 'end': '402286'}, 
    {'curve': <Element 'Curve' at 0x000000E56598E8B0>, 'begin': '402286', 'end': '402542'}]
    Avez-vous une idée d'algorithme?

    Merci,

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 739
    Par défaut
    Salut,

    Citation Envoyé par DiverSIG Voir le message
    Avez-vous une idée d'algorithme?
    Pour les algorithmes, la bonne rubrique est algorithmique.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    une façon de faire parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    l = [
        {'curve': None, 'begin': '380270', 'end': '308078'},
        {'curve': None, 'begin': '520046', 'end': '446574'},
        {'curve': None, 'begin': '402286', 'end': '402542'},
        {'curve': None, 'begin': '520558', 'end': '380270'},
        {'curve': None, 'begin': '308078', 'end': '402286'},
        {'curve': None, 'begin': '446574', 'end': '520558'}
    ]
     
    l1 = [i['begin'] for i in l]     # la liste des begin
    l2 = [i['end'] for i in l]       # la liste des end
    val = (set(l1) - set(l2)).pop()  # on recup le premier begin
    idx = l1.index(val)              # son index
    newlist = [l[idx]]               # l'entree correspondante dans l comme premier element de newlist
    for _ in range(len(l1)-1):       # et on itere
        newlist.append(l[l1.index(newlist[-1]['end'])]) # chaque element en fonction du precedent

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par BufferBob Voir le message
    une façon de faire parmi d'autres
    Joli J'ai bien aimé le (set(l1) - set(l2)).pop() (qui présuppose toutefois que la liste contient donc un et un seul point de départ => impossible par exemple de traiter un "l" qui contiendrait plusieurs chemins distincts mais bon, on ne peut pas tout faire non plus ).
    J'ai désespérément cherché comment remplacer la boucle et le append() par une comprehension list mais sans succès. Je n'arrive pas à exprimer la notion "le x[begin] que tu trouves doit correspondre au dernier x[end] que tu as trouvé"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [PHP 7] Tri tableau d'objet
    Par from18to22 dans le forum Langage
    Réponses: 1
    Dernier message: 14/01/2019, 13h57
  2. tri de tableau d'objets
    Par gmatu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2009, 14h20
  3. [POO] Tri d'un tableau contenant des objets
    Par shadypierre dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2009, 20h49
  4. [Tableaux] Tri d'un tableau d'objets
    Par tamiii dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2009, 17h03
  5. Réponses: 4
    Dernier message: 30/05/2007, 14h35

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