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 :

Comment décompresser une liste formée par des tuples?


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Par défaut Comment décompresser une liste formée par des tuples?
    Bonjour à tous :

    Voici à tous, un problème complexe pour moi, car il demande une certaine maitrise des listes, et en particulier de la notion de compréhension de liste qui me dépasse un peu.

    Supposons qu'on ait une liste constituée par une série de tuples, par exemple : liste_initiale = [(4, 1), (2, 5), (2, 'test'), (3, 6), (1, 'bonjour')]

    A partir de cette liste, on veut créer une nouvelle liste, appelée liste_finale, dans laquelle le 1er terme dans chacun des tuples ci-dessus indique le nombre de répétitions successives du 2ème élément de ce tuple. Quel serait un code possible pour créer une telle fonction qui reçoit la liste ci-dessus en paramètre, "décompresse" cette liste, et renvoie la nouvelle liste ?

    Dans le cas ci-dessus, le résultat attendu serait donc : [1, 1, 1, 1, 5, 5, 'test', 'test', 6, 6, 6, 'bonjour']
    Je travaille avec Python 3. Merci d'avance pour ceux parmi vous qui pourront m'aider.

  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.

    Pourquoi vouloir faire une liste en compréhension si intuitivement cela n'est pas le plus simple et intuitif ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> l = [(4, 1), (2, 5), (2, 'test'), (3, 6), (1, 'bonjour')]
    >>> nl = []
    >>> for i, n in l:
    ...     nl.extend((n,) * i)
    ... 
    >>> nl
    [1, 1, 1, 1, 5, 5, 'test', 'test', 6, 6, 6, 'bonjour']
    Est très simple et limpide.

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Par défaut
    Merci Beaucoup ! Je vais tester cela de suite...

    Seule chose qui me gene dans ce code, c'est le tuple (n,). Je n'ai jamais compris pourquoi on ne mettait pas de deuxième terme après la virgule, et donc, pourquoi mettre une virgule. Je ne suis pas fort en listes et tuples. Encore merci pour votre aide.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par Olivier20000 Voir le message
    Seule chose qui me gene dans ce code, c'est le tuple (n,). Je n'ai jamais compris pourquoi on ne mettait pas de deuxième terme après la virgule, et donc, pourquoi mettre une virgule
    La réponse est dans votre question. (n,) est un tuple. (n) est un entier auquel on a mis des parenthèses inutiles qui pourrait signaler une priorité de calcul comme dans a*(n1 + n2).

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par Olivier20000 Voir le message
    Seule chose qui me gene dans ce code, c'est le tuple (n,). Je n'ai jamais compris pourquoi on ne mettait pas de deuxième terme après la virgule, et donc, pourquoi mettre une virgule.
    Il n'y a rien à comprendre: juste relire et réfléchir à ce que Python pourrait faire de
    • (n) * i,
    • (n,) * i

    sachant que les parenthèses sont aussi utilisées pour prioriser l'évaluation d'une expression logique ou arithmétique.
    Une autre façon de voir est que (n,) équivaut à tuple([n]).

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

  6. #6
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2019
    Messages : 1
    Par défaut
    Bonjour,

    je suis débutant en Python ; avec le même exercice je trouve pas un code correct.
    Le code apparaît des erreurs que je les ignore.
    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
    def decompresse (t) :
        liste_comp = [(4, 1), (2, 2), (2, 'test'), (3, 3), (1, 'bonjour')]
        l = []
        for i, n in l:
            l.extend((n,) * i)
        for j in range(4):
            l.append(1)
        for k in range(2):
            l.append(2)
        for h in range (2) :
            l.append('test')
        for m in range(3):
              l.append(3)
        for n in range(1):
              l.append('bonjour')
        for r, e in liste_comp:
            l = [1, 1, 1, 1, 2, 2, 'test', 'test', 3, 3, 3, 'bonjour']
        return l

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par Olivier20000 Voir le message
    Quel serait un code possible pour créer une telle fonction qui reçoit la liste ci-dessus en paramètre, "décompresse" cette liste, et renvoie la nouvelle liste ?
    à la première étape, on doit r(épéter)=4 fois l'e(lément)=1.
    Ce qui peut se traduire par une boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         for j in range(r):
              nouvelle_liste.append(e)
    et pour effectuer chaque étape, çà va être for r, e in liste_initiale:
    Citation Envoyé par Olivier20000 Voir le message
    Quel serait un code possible pour créer une telle fonction qui reçoit la liste ci-dessus en paramètre, "décompresse" cette liste, et renvoie la nouvelle liste ?
    Avec ces indications, vous devriez arriver à ecrire un premier code.
    N'oubliez pas que le seul intérêt de ce genre d'exercice sera dans le temps que vous allez passer à découvrir comment vous battre avec le langage pour y arriver. Si c'est pour le faire faire par d'autres, çà n'a aucun intérêt: autant attendre le corrigé du prof.

    edit: grilled par bistouille

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/05/2016, 13h06
  2. [OpenOffice][Tableur] Comment réaliser une liste déroulante avec des images
    Par flexi2202 dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 30/04/2015, 10h34
  3. [MySQL] Changer une liste déroulante par des checkbox
    Par Penny dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/09/2012, 19h10
  4. Réponses: 0
    Dernier message: 08/06/2011, 13h45
  5. Réponses: 2
    Dernier message: 17/03/2008, 14h17

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