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 :

Fusionner des listes de listes [Python 2.X]


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Points : 31
    Points
    31
    Par défaut Fusionner des listes de listes
    Bonjour,

    Je suis entrain d'écrire un code de manipulation des données dans des listes.
    Je parviens à obtenir les résulats souhaitées mais j'ai un soucis au niveau de la fusion des sous listes.

    Exemple :

    [ [ [1, 1], [3, 3], [3, 3] ], [ [5, 5], [8] ] ]

    je vais faire la fusions des sous listes de telle façon d'obtenir :

    [ [1,1,3,3,3,3] , [5,5,8] ]

    Si vous pouvez m'aider je vous en serais infiniment reconnaissant.

  2. #2
    Membre confirmé

    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
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Si tu sais parcourir les éléments d'une liste, qu'elle soit à plusieurs niveaux ou non c'est toujours le même principe, il suffit de parcourir chaque fois les éléments dans chaque niveaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> liste = [[[1, 1], [3, 3], [3, 3]], [[5, 5], [8]]]
    >>> nliste = []
    >>> for element in liste :
    ...     nelement = []
    ...     for souselement in element :
    ...         nelement.extend(souselement)
    ...     nliste.append(nelement)
    ... 
    >>> nliste
    [[1, 1, 3, 3, 3, 3], [5, 5, 8]]
    Le temps ronge l'amour comme l'acide.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Une autre possibilité (à ajuster pour Python 2, que je n'ai pas sur ma machine) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    original = [[[1, 1], [3, 3], [3, 3]], [[5, 5], [8]]]
    print(original)
     
     
    def merge(l):
        m = list()
        for e in l:
            m += e
        return m
     
     
    modified = [merge(e) for e in original]
    print(modified)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si vous débutez en Python, c'est un bon exercice pour apprendre à maîtriser listes de listes et boucles imbriquées. Mais "aplatir" une liste de listes est une opération que l'on peut répéter souvent. Dans ce cas, il y a, en général, la fonction qui fait le boulot dans les bibliothèques standards. Ici c'est chain.from_iterable du module itertools:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from itertools import chain
    >>> L = [ [ [1, 1], [3, 3], [3, 3] ], [ [5, 5], [8] ] ]
    >>> [ list(chain.from_iterable(e)) for e in L ]
    [[1, 1, 3, 3, 3, 3], [5, 5, 8]]
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est d'ailleurs très amusant de créer une fonction récursive qui "aplatit" une liste, quelque soit sa profondeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def aplatliste(L):
        """transforme un arbre (liste de listes...) en une liste à 1 seul niveau
        """
        R = []
        for elem in L:
            if isinstance(elem, (list, tuple)):
                R.extend(aplatliste(elem))
            else:
                R.append(elem)
        return R
    Et dans l'exemple qui est donné, il suffit d'appliquer cette fonction à chacun des éléments de la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    L = [ [ [1, 1], [3, 3], [3, 3] ], [ [5, 5], [8] ] ]
     
    R = [aplatliste(element) for element in L]
     
    print R 
    [[1, 1, 3, 3, 3, 3], [5, 5, 8]]
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2017
    Messages : 28
    Points : 31
    Points
    31
    Par défaut
    Je vous remercie infiniment tous
    J'ai essayé tous vos propositions qui marchent parfaitement ...
    C'était un très bon exercice de manipulation des listes
    Un grand MERCI

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

Discussions similaires

  1. [Toutes versions] fusionner des listes de validation
    Par Cantalou dans le forum Excel
    Réponses: 0
    Dernier message: 21/06/2011, 12h18
  2. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  3. Réponses: 5
    Dernier message: 27/04/2007, 18h11
  4. contrôle des zones de liste dans formulaire
    Par philpaul dans le forum IHM
    Réponses: 4
    Dernier message: 25/11/2005, 23h28

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