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 :

Manipulation d'une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut Manipulation d'une liste
    Bonjour,

    J'ai une liste de taille variable de cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = ((a,b,c),(d,e,f),(g,h,i))
    et j'aimerai obtenir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = (a,b,c,d,e,f,g,h,i)
    svp aidez moi

  2. #2
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    C’est pas une liste, mais un tuple, ça…

    Sinon, à la main*:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    t = ((1,2,3),(4,5,6),(7,8,9))
    ret = []
    for el in t:
        ret += el
     
    t = tuple(ret)

    Ou alors, avec les itertools*:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import itertools
     
    t = tuple(itertools.chain(*t))


  3. #3
    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,

    Et on peut utiliser une fonction récursive pour traiter la mise à plat dans le cas général, quelque soit la "profondeur" de l'imbrication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def aplatliste(L):
        R = []
        for elem in L:
            if isinstance(elem, (list, tuple)):
                R.extend(aplatliste(elem))
            else:
                R.append(elem)
        return R
     
    x = (('a','b','c'), 'd',('e',('f','g'),'h'))
     
    print tuple(aplatliste(x))
    ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
    Tyrtamos

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 752
    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 752
    Par défaut
    Salut,
    une structure de la forme (('a','b','c'), 'd',('e',('f','g'),'h')) est un arbre et ('a','b','c', 'd', 'e', 'f','g' ,'h') la liste des feuilles que l'on rencontre lorsqu'on parcours l'arbre en depth first.

    Exprimé sous une forme récursive, çà donne la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def walk(tree, f):
        for node in tree:
            if has_childs(node):
                walk(node, f)
            else:
                f(node)
    Après, c'est de la décoration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    has_childs = lambda c: isinstance(c, (tuple, list))
    x = (('a','b','c'), 'd',('e',('f','g'),'h'))
    R = []
    walk(x, R.append)
    print R
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Creation et manipulation d'une liste a plusieurs elements
    Par student_ dans le forum Débuter
    Réponses: 6
    Dernier message: 21/02/2011, 08h44
  2. Manipulation d'une liste chainée en C++
    Par id_rima dans le forum C++
    Réponses: 11
    Dernier message: 21/06/2010, 10h50
  3. manipulation d'une liste chainé
    Par sorari dans le forum C++
    Réponses: 1
    Dernier message: 16/03/2005, 12h32
  4. [PDFBox]Comment manipuler une LIST
    Par marcotop dans le forum Documents
    Réponses: 11
    Dernier message: 27/08/2004, 15h46

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