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 :

Travail sur une liste [Python 2.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 89
    Points : 56
    Points
    56
    Par défaut Travail sur une liste
    Bonjour,

    j'ai une liste sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listGlobal = [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    J'aimerais créer une nouvelle liste à partir de VAR_BEN_SCL et VAR_BEN_NAI (concaténation).

    Ex : [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    j'aimerais obtenir => listDTN = ['27092000', '27081900', '03122002']

    Comment procéder ? est-ce possible ?

    Merci pour vos pistes et retours.

    Cdt,

  2. #2
    Membre averti Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 155
    Points : 346
    Points
    346
    Par défaut
    Bonjour,

    oui c'est possible après il serait plus simple si la première liste était divisée en deux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    VAR_BEN_SCL = ['20', '19', '20']
    VAR_BEN_NAI = ['270900', '270800', '031202']
     
    for i in zip(VAR_BEN_SCL, VAR_BEN_NAI):
        # faire la concaténation et à ajouter à la nouvelle liste ici
    Est-ce une contrainte ?
    Quelle est la règle de concaténation ?

  3. #3
    Membre actif Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 151
    Points : 208
    Points
    208
    Par défaut
    Hello,

    Si je te suis bien c'est ça que tu appelles concaténer ? ( avec les couleurs )

    Ex : [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    j'aimerais obtenir => listDTN = ['27092000', '27081900', '03122002']

    si a =
    [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]

    tu parcours ta liste en lisant les valeurs 2 à 2

    tu lis a[x][1] et a[x+1][1] puis tu découpes les chaines et les concatènes pour obtenir le résultat voulu

    c et d etant tes deux chaines : c[:4] + d + c[-2:] est ton résultat ..... à peu près , je te laisse écrire le code correct

  4. #4
    Membre actif Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 151
    Points : 208
    Points
    208
    Par défaut
    Du coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    listDTN = []
    a=0
    listGlobal = [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    while a < len(listGlobal) :
        listDTN.append(listGlobal[a+1][1][:4] + listGlobal[a][1] + listGlobal[a+1][1][-2:])
        a = a + 2
     
     
    >>> print listDTN
    ['27092000', '27081900', '03122002']

    En supposant que ta liste est toujours "bien formatée" , sinon il faudra rajouter des contrôles sur les valeurs.

  5. #5
    Membre émérite

    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
    Points : 2 328
    Points
    2 328
    Par défaut
    Et si elle ne l'est pas (bien formatée) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    listDTN = []
    listGlobal = [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    for elem in listGlobal :
        if elem[0] == 'VAR_BEN_NAI' :
               listDTN.append(elem[1])
    ce qui peut se raccourcir ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    listGlobal = [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    listDTN = [ elem[1] for elem in listGlobal if elem[0] == 'VAR_BEN_NAI' ]

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    (...)
    t'as oublié la concaténation des valeurs deux à deux entre les NAI et les SCL, ce qui justement pourrait créer un désalignement si un seul tuple manque/est en trop dans listeGlobal

    une solution cracra comme on les aime parmi d'autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> listGlobal = [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
    >>> listeDTN = [ i[0:4] + j + i[4:] for i,j in zip(
    ...    [j for i,j in listGlobal if i == 'VAR_BEN_NAI'],
    ...    [j for i,j in listGlobal if i == 'VAR_BEN_SCL'] )]
    >>> listeDTN
    ['27092000', '27081900', '03122002']

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    désolé de répondre qu'aujourd'hui, j'étais sur un autre sujet hier.

    Je vais tester vos différents retour et je vous tiens au courant dans la journée.

    Merci beaucoup.

    @+ tard.

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    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 : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Bonjour,

    Je verrai bien l'utilisation du dictionnaire pour cet exercice,

    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
    21
    listGlobal = [('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '270900'),              
                  ('VAR_BEN_SCL', '19'), ('VAR_BEN_NAI', '270800'),
                  ('VAR_BEN_SCL', '20'), ('VAR_BEN_NAI', '031202')]
     
     
    result = {}
     
     
    for key, value in listGlobal:
        if key not in result:
            result[key] = [value]
        else:
            result[key].append(value)
     
     
    listDTN = result['VAR_BEN_NAI']
    print(listDTN) # ['270900', '270800', '031202']
     
     
    print(result) # {'VAR_BEN_SCL': ['20', '19', '20'], 
                  #  'VAR_BEN_NAI': ['270900', '270800', '031202']}
    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)

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    C'est OK !! Merci à tous.

    Que ce soit la solution de BufferBob ou olivier1969, ça fonctionne. Quelques adaptations pour l'intégrer dans l'ensemble du programme, mais c'est tout bon.

    Pour ma compréhension et pour m'améliorer en python, j'aurais besoin d'explication sur cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    listeDTN = [ i[0:4] + j + i[4:] for i,j in zip(
        [j for i,j in listGlobal if i == 'VAR_BEN_NAI'],
        [j for i,j in listGlobal if i == 'VAR_BEN_SCL'] )]
    Ce que je comprends : tu formates directement la date en récupérant les valeurs i et j grâce à la concaténation des listes (via zip) en vérifiant la condition de i.

    Merci !

  10. #10
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par lasnico37 Voir le message
    Ce que je comprends : tu formates directement la date en récupérant les valeurs i et j grâce à la concaténation des listes (via zip) en vérifiant la condition de i.
    c'est ça, on crée la liste des NAI, la liste des SCL, et on itère sur les deux listes membre à membre avec zip pour pouvoir concaténer

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

Discussions similaires

  1. [Débutant] Travailler sur une liste d'images
    Par medsyorick dans le forum Images
    Réponses: 1
    Dernier message: 17/07/2013, 17h13
  2. [Procédure stockée] Comment travailler sur une liste de ...
    Par WwiloO dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/02/2006, 11h22
  3. Selectionnet tous ou faire un clear sur une liste
    Par Canou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/11/2004, 10h26
  4. Travailler sur une date
    Par HqX dans le forum Langage SQL
    Réponses: 11
    Dernier message: 05/10/2004, 15h54
  5. [Débutant][jsp] évènement sur une liste
    Par phoebe dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/05/2004, 10h53

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