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 de listes


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut Tri de listes
    Rebonjour,

    Je cherche à enrichir les elts d'une liste L1 avec des elts d'une seconde liste L2 selon un seul critère de comparaison avec cette même liste L2.

    Ma liste L1 est (contient deux éléments) :

    [[2, 2, 1, [1, 143, 1, 111, 1, 1], [[7, 0, [1, 1, 1, 111, 1, 1]], [8, 1, [143, 143, 1, 111, 1, 1], 3, 6, 23, [1, 13, 1], [1, 2, 3]], [9, -1, [1, 143, 1, 1, 1, 1]], [10, 0, [1, 143, 111, 111, 1, 1]]]], [3, 2, 2, [1, 17, 1, 13, 1, 1], [[11, -2, [1, 1, 1, 13, 1, 1]], [12, 1, [17, 17, 1, 13, 1, 1], 3, 6, 22, [1, 1, 1], [1, 2, 3]], [13, -1, [1, 17, 1, 1, 1, 1]], [14, -1, [1, 17, 13, 13, 1, 1]]]]]

    Ma liste L2 est (4 elts):
    [[1, [2, 130, 3, 8, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0], [1, [6, 8, 9, 10, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0], [1, [9, 11, 3, 8, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0], [2, [5, 11, 9, 12, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0]]

    le critère pour ajouter le bn elt de L2 à celui qui lui correspond en L1 est la correspondance de valeurs entre la 3ème valeur de chaque elt de L1 avec le 1er de chaque elt de L2 , ce qui donne en python :


    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
        for blk in L1:
     
            for clk in L2:
                print clk[0],"*****************",blk[2]
                if blk[2] == clk[0] : # les deux indices correspondent              
                   #p_nnspl.remove(clk[0]) # on eleve le tag initial              
                   print clk,"*****************",blk
                   blk_nnspl1= copy.copy(blk) # on copie le domaine et ses caractéristiques dans une première liste
                   cl1 = copy.copy(clk)
     
                   cl1.pop(0) # je supprime l'indice dont je n'ai plus besoin
                   clk1.append(cl1)
                   blk_nnspl1.append(clk1)
                   blk_nnspla.append(blk_nnspl1)
                   continue
    hélas ce programme est loin d'être performant, il en résulte bcp d'erreurs et je n'arrive pas à l'améliorer pr qu'il corresponde au but souhaité! Et je ne comprends pas pourquoi il ne marche pas correctement!
    Auriez vous une idée de ce qui cloche?

    Merci.
    M.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    on peut avoir un exemple lisible d' input==>expected output stp ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bien sur !! pardon j'ai oublié de le mentionner !!

    Alors, normalement , je devrais obtenir un truc du genre :

    blk_nnspla = [[2, 2, 1, [1, 143, 1, 111, 1, 1], [[7, 0, [1, 1, 1, 111, 1, 1]], [8, 1, [143, 143, 1, 111, 1, 1], 3, 6, 23, [1, 13, 1], [1, 2, 3]], [9, -1, [1, 143, 1, 1, 1, 1]], [10, 0, [1, 143, 111, 111, 1, 1]]], [[[2, 130, 3, 8, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0], [[6, 8, 9, 10, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0], [[9, 11, 3, 8, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0]], [3, 2, 2, [1, 17, 1, 13, 1, 1], [[11, -2, [1, 1, 1, 13, 1, 1]], [12, 1, [17, 17, 1, 13, 1, 1], 3, 6, 22, [1, 1, 1], [1, 2, 3]], [13, -1, [1, 17, 1, 1, 1, 1]], [14, -1, [1, 17, 13, 13, 1, 1]]], [[[5, 11, 9, 12, 1, 1], 1, 1, 1, 1, 0, 0, 0, 0]]]]

    voilà voilà !

  4. #4
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour,
    tout ceci n'est pas clair pour moi. En synthétisant bien ce que tu cherches à faire, je pense que tu trouveras sûrement la solution tout seul.

    Pourrais-tu donner un exemple simplifié et détaillé ?

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Oui bien sur ,

    Alors L1 = [ [a1,b1,c1,[etc]], [a2,b2,c2,[etc2] ]
    L2 = [ [c1,[infos1]], [c1,[infos2]], [c2,[infos3]] ]

    quand la 1ère valeur des elts de L2 est égale à la 3ème valeur des elts de L1 , alors on crée une nouvelle liste faite d'elts construits de la manière suivante :

    elt_nv_liste = [elt_de_L1,elt_de_L2]

    Ce qui donne en pratique ceci :

    nv_liste = [ [a1,b1,c1,[etc], [ [c1,[infos1]], [c1,[infos2]] ] ], [a2,b2,c2,[etc2] , [ [c2,[infos3]]] ] ]

    voilà voilà !

    M.

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Avec le module itertools il doit y avoir un moyen de le faire peut-être.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from itertools import izip_longest
    for i in izip_longest(L1, L2):
        print i,
    Résultat :

    (['a1', 'b1', 'c1', ['etc']], ['c1', ['infos1']]) (['a2', 'b2', 'c2', ['etc2']], ['c1', ['infos2']]) (None, ['c2', ['infos3']])
    Peut-être cela que tu veux ???

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

Discussions similaires

  1. Requête, tri sur liste de choix
    Par seb.kepka dans le forum Access
    Réponses: 1
    Dernier message: 15/05/2006, 14h47
  2. Algo de tri par liste chainée
    Par Treuze dans le forum C
    Réponses: 3
    Dernier message: 30/12/2005, 14h05
  3. quel est le meilleur algo de tri de liste ?
    Par sony351 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 24/07/2005, 02h00
  4. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 14h00
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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