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 :

Utilisation join sur une liste imbriquée


Sujet :

Python

  1. #41
    Membre éclairé Avatar de Marcopololo
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 311
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Vu le code que vous avez posté, j'en suis pas si sûr!
    Relisez votre code: ligne 11 mon_tab contient une liste de listes à 2 éléments (à la place de tuples du coup précédents.
    Ligne 12, vous utilisez l'astuce sum pour "aplatir" la liste. Elle devient liste simple.
    Ligne 13, le batched refabrique le groupage en 2 éléments que vous venez juste de défaire...

    De plus il n'y a aucun intérêt à avoir ces deux dernières lignes dans le corps de la boucle.
    Je suis passé par ce biais parce que je me retrouvais avec ce code avec une structure de type keys= [[a1,b1],[a2,b2]...] alors que j'avais besoin de [a1,b1,a2,b2,....]

    Je vais m'attacher à comprendre ces contractions de code.
    Encore merci de votre aide
    Marcopololo

  2. #42
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 060
    Par défaut
    Citation Envoyé par Marcopolo
    Au départ je ne l'avais pas mise en global, je n'aurais pas dû écouter les recommandations de Pycharm...
    PyCharm a probablement vu que tu assignais une valeur à str2 (str2 = ...) dans ta fonction.
    S'il existait déjà une variable str2 en dehors (globale), PyCharm a pu croire que tu voulais modifier celle-là. Il t'a donc suggéré global str2 pour indiquer clairement cette intention à Python.

    Même si PyCharm le suggère, utiliser global est souvent une mauvaise idée car ça rend le code plus compliqué à suivre. Il vaut mieux passer les informations nécessaires à la fonction via ses arguments et récupérer le résultat avec return.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #43
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par Marcopololo Voir le message
    Je suis passé par ce biais parce que je me retrouvais avec ce code avec une structure de type keys= [[a1,b1],[a2,b2]...] alors que j'avais besoin de [a1,b1,a2,b2,....]
    Tout le problème vient de votre entêtement à ne pas voir que vous n'en avez pas besoin.
    C'est bien d'être un peu obstiné mais lachez prise de temps en temps, ça repose!
    Faites un peu travailler vos neurones, quelle est la différence entre [[a1,b1],[a2,b2]...] et [a1,b1,a2,b2,....]?
    Essentiellement que le lien entre 2 items consécutifs est explicite (les [] regroupent) ou pas (même si "on voit" les paires de chiffres successifs dans les labels).
    Vous étiez parti de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                  items2 = [e[field] for field in fields if e[field]]
    qui plante de temps en temps avec "ValueError: not enough values to unpack..." parce qu'o travaille sur la liste "plate". Si not e[field], on se retrouve avec un item en moins à la sortie.
    Quand j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                           items2 = [ (e[a], e[b]) for (a, b) in batched(fields, 2) if e[b] ]
    Je refabrique l'association explicite [(a, b), (c, d), ...] pour ne garder le tuple que si le 2nd item existe. Dit autrement, c'est pas tout de virer un items mais il faut aussi pouvoir virer celui qui lui est associé... et cela n'est pas facile à faire sans association explicite.

    Et dans cette histoire il n'y a pas de "python", c'est juste une histoire de façon pratique de regrouper des objets dans des boîtes et de le faire de façon cohérente avec ce que sait faire un ordinateur: des boucles emboitées, listes composites, ...
    Et n'oubliez pas qu'il n'y a rien de naturel dans un ordinateur, il a été fabriqué pour être efficace et sera un bon serviteur pour autant que vous compreniez comment il fonctionne.

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

  4. #44
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Marcopololo Voir le message
    Je suis passé par ce biais parce que je me retrouvais avec ce code avec une structure de type keys= [[a1,b1],[a2,b2]...] alors que j'avais besoin de [a1,b1,a2,b2,....]
    Sans parler du pourquoi et du comment tu te retrouves avec ce genre de structure, il y a des outils déjà existants permettant de faire ce travail de "mettre à plat"...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> keys= [["a1", "b1"], ["a2", "b2"], ["a3", "b3"]]
    >>> import itertools
    >>> tuple(itertools.chain.from_iterable(keys))
    ('a1', 'b1', 'a2', 'b2', 'a3', 'b3')
    >>>
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #45
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    il y a des outils déjà existants permettant de faire ce travail de "mettre à plat"...
    Tout à fait, d'ailleurs le PO utilise ici sum.
    note: chain.from_iterable et sum n'aplatissent pas des listes imbriquées de profondeur arbitraire comme [[[1, 2]], [3, 4]]

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

  6. #46
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    Citation Envoyé par Marcopololo Voir le message
    Je suis passé par ce biais parce que je me retrouvais avec ce code avec une structure de type keys= [[a1,b1],[a2,b2]...] alors que j'avais besoin de [a1,b1,a2,b2,....]
    Tu prends le problème complètement à l'envers.

    Il faut dans un premier temps que tu saches ce que tu dois avoir pour extraire les données. En fonction de ton besoin, tu vas alors créer une structure (voire même pas)
    Quel est l'intéret pour toi Marco de boucler pour créer une structure puis dans un second temps boucler sur cette structure (pour la modifier ou non) et enfin extraire les données

    speudo code : puisque j'utilise une boucle classique (bien comprise par Marcopololo ?), je n'ai même pas a créer une structure pour ensuite encore boucler dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    travaux = []
    A, B ="date", "remarque"
    for i := range 1..7:
       ka, kb = f"{A}{i}", f"{B}{i}"
       si ka est pas dans e:
            continue
        # en fonction des regles métier désirées :
        # ? si kb est pas dans e:        continue
        # ? si e[kb] est vide ?   continue
        # ? remarque = e[kb] si kb est dans e sinon ""
        travaux.append( f" date: {e[ka}} \t remarque: {e[kb]}" )  
     
    print(len(travaux) , "travaux")
    print("\n".join(travaux))
    $moi= (:nono: !== :oops:) ? :king: : :triste: ;

  7. #47
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    On a d'ailleurs un exercice qui reflète bien ce sujet (apprendre à traiter une structure X pour en générer une structure Y) : https://python.developpez.com/exerci...e-des-familles.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. Utiliser AVG pour un calcul sur une liste d'entité
    Par VirgApps dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/10/2014, 14h46
  2. Utiliser le double clic sur une liste dans HTA
    Par papyxy dans le forum VBScript
    Réponses: 3
    Dernier message: 06/07/2014, 09h14
  3. Utiliser LEFT JOIN sur une grosse base de données
    Par bractar dans le forum Requêtes
    Réponses: 20
    Dernier message: 11/01/2014, 07h32
  4. Réponses: 2
    Dernier message: 08/09/2011, 09h07
  5. Réponses: 7
    Dernier message: 18/04/2006, 17h44

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