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

Calcul scientifique Python Discussion :

Manipulation des listes


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut Manipulation des listes
    Bonjour,

    Je débute en Python et je n'arrive pas à réaliser l'opération suivante pour aplatir une liste des listes :

    Exemple:
    Si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    L = [ [ [X1] , [1,2,3] ],
    [ [X1] , [1,1,2] ],
    [ [X1], [1,1,1] ],
    [ [X2], [1,1,2] ],
    [ [X2], [2,1,3] ],
    [ [X3], [2,2,2] ] ]
    J'aimerai avoir la résultat suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    L = [ [ [X1], [1,2,3], [1,1,2], [1,1,1] ],
    [ [X2], [1,1,2], [2,1,3] ],
    [ [X3], [2,2,2] ] ]
    c'est à dire regrouper les élements de X1 ensemble, X2 ensemble, X3 aussi dans une même sous liste.

    Je vous remercie par avance

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tu peux nous montrer ce que tu as fait déjà ?

    De cette façon, quelqu'un pourra te montrer où sont tes erreurs, car ce que tu souhaites faire est relativement simple.

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    On peut par exemple tout concaténer et enlever les doublons.

  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,

    Voilà comment je ferais:

    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
    17
    18
    19
    20
    L = [ [ ['X1'] , [1,2,3] ],
        [ ['X1'] , [1,1,2] ],
        [ ['X1'], [1,1,1] ],
        [ ['X2'], [1,1,2] ],
        [ ['X2'], [2,1,3] ],
        [ ['X3'], [2,2,2] ] ]
     
     
    R = []
    for cle, valeur in L:
        try:
            ind = [i for i, elem in enumerate(R) if elem[0]==cle][0]
            # cle est trouvé dans R à l'indice ind: on ajoute sa valeur
            R[ind].append(valeur)
        except Exception:
            # cle n'est pas trouvé dans R: on l'ajoute avec sa valeur
            R.append([cle, valeur])    
     
    print(R)
    [[['X1'], [1, 2, 3], [1, 1, 2], [1, 1, 1]], [['X2'], [1, 1, 2], [2, 1, 3]], [['X3'], [2, 2, 2]]]
    La logique est simple. Le point le plus complexe est la ligne de calcul de l'indice ind.

    Il s'agit de savoir si dans la liste R qu'on est en train de construire, la clé a déjà été rencontrée ou pas.
    - si elle a été déjà rencontrée, ind est l'indice de R où on l'a trouvé, et on se contente d'ajouter la nouvelle valeur
    - sinon, la liste des indices est vide, et c'est le [0] final qui génère l'exception et qui permet d'ajouter la clé avec sa valeur après le "except".

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    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 759
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Il s'agit de savoir si dans la liste R qu'on est en train de construire, la clé a déjà été rencontrée ou pas.
    - si elle a été déjà rencontrée, ind est l'indice de R où on l'a trouvé, et on se contente d'ajouter la nouvelle valeur
    - sinon, la liste des indices est vide, et c'est le [0] final qui génère l'exception et qui permet d'ajouter la clé avec sa valeur après le "except".
    Juste pour faire de la pub. pour la construction "for"..."else", on peut éviter "try...except" ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    R = []
    for cle, valeur in L:
        for item in R:
            if item[0] == cle:
                break
        else:
            item = [ cle ]
            R.append(item)
     
        item.append(valeur)
    Ceci dit, on passera certainement par un dictionnaire plutôt que de chercher "à la main".
    Par contre, côté liste, l'exercice devient intéressant si elle est "bien rangée" (ce qui est le cas de l'exemple):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    R = L[0]
    for k, v in L[1:]:
        if k == R[-1][0]:
            R[-1].append(v)
        else:
            R += [ k, v ]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Par défaut
    Merci pour vos réponses, ça marche parfaitement !!

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

Discussions similaires

  1. Manipuler des listes de listes (List<List<String>>)
    Par qtnegg dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 16/02/2012, 15h33
  2. manipulation des liste déroulantes
    Par erlerwade dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2012, 01h04
  3. manipulation des listes chainées
    Par bounadalvidal dans le forum Débuter
    Réponses: 8
    Dernier message: 19/01/2010, 19h40
  4. De la manipulation des listes déroulantes
    Par Herode dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2007, 16h55
  5. Manipuler des listes d'objet ?
    Par xla99 dans le forum Général Python
    Réponses: 4
    Dernier message: 06/06/2006, 15h06

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