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 :

Creer une nouvelle liste a partir de 2 listes différentes


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut Creer une nouvelle liste a partir de 2 listes différentes
    Bonjour, je vous ecrit car je suis débutant en langage python et plus généralement en programmation.
    J'apprends ce langage a l'aide du livre de Gerard Swinnen : Apprendre a programmer avec python.
    Et je bute sur l'exercice suivant qui me parait pourtant accessible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Soient les listes suivantes :
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
            'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
    Écrivez un petit programme qui crée une nouvelle liste t3. Celle-ci devra contenir tous les
    éléments des deux listes en les alternant, de telle manière que chaque nom de mois soit
    suivi du nombre de jours correspondant : ['Janvier',31,'Février',28,'Mars',31,
    etc...].
    Pour essaye de le résoudre voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # -*- coding:Utf-8 -*-
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier','Février','Mars','Avril','Mai','Juin',"Juillet",'Août','Septembre','Octobre','Novembre','Décembre']
    t3=[]
    a=0
    b=len(t1)
    while a<=b:
        t3.append(t2[a])
        t3.append(t1[a])
        print t3[a],
        a+=1
    Cependant j'ai une erreur qui est celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nounours@nounours-desktop:~/Bureau$ python liste_mois.py
    Janvier 31 Février 28 Mars 31 Avril 30 Mai 31 Juin 30
    Traceback (most recent call last):
      File "liste_mois.py", line 8, in <module>
        t3.append(t2[a])
    IndexError: list index out of range
    En fait c'est comme si le code incrementait "a" une premiere fois apres le t3.append(t2[a]), puis une seconde fois après le t3.append(t1[a]), en effet si je mets un print a juste apres le while a<=b comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # -*- coding:Utf-8 -*-
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier','Février','Mars','Avril','Mai','Juin',"Juillet",'Août','Septembre','Octobre','Novembre','Décembre']
    t3=[]
    a=0
    b=len(t1)
    while a<=b:
        print "a=",a
            t3.append(t2[a])
        t3.append(t1[a])
        print t3[a],
        a+=1
    Python me retourne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a= 0
    Janvier a= 1
    31 a= 2
    Février a= 3
    28 a= 4
    Mars a= 5
    31 a= 6
    Avril a= 7
    30 a= 8
    Mai a= 9
    31 a= 10
    Juin a= 11
    30 a= 12
    Je ne comprends pas ou est l'erreur, en fait pourquoi a est incrémenter apres chaque append.
    Auriez vous une solution ?
    Cordialement CHristophe.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    Le bonjour ,

    Ton code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # -*- coding:Utf-8 -*-
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier','Février','Mars','Avril','Mai','Juin',"Juillet",'Août','Septembre','Octobre','Novembre','Décembre']
    t3=[]
    a=0
    b=len(t1)
    while a<=b:
        t3.append(t2[a])
        t3.append(t1[a])
        print t3[a],
        a+=1
    Si le compteur a s'incrémente, c'est bien normal puisque l'instruction a += 1 est présente à la fin du corps de la boucle while. l'instruction a +=1 est équivalente à l'instruction a = a + 1.

    Le probleme est simple à régler: une liste de longueur 5 (par exemple) a 5 éléments accessibles via les indices 0, 1, 2, 3 et 4. Pas 5.

    Le problème rencontré est donc le suivant: au douzieme passage de boucle, la variable a est incrémentée de 11 à 12 (dans ton cas), juste après avoir ajouté t2[11] et t1[11] à t3. Au passage suivant, l'indice affiché est 12, mais t2[12] genere une exception.

    La correction à faire est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while a < b:
        #ici la même chose.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 53
    Par défaut
    Je vois que l'affichage que tu fais n'est probablement pas celui que tu espères.

    Tu ajoutes t2[a] et t1[a] à t3, puis tu affiche t3[a].
    Avec cette methode, tu n'affiches que la moitié des éléments.

    # premier passage de la boucle: t3 = ["Janvier", 31]
    print t3[0]

    #deuxieme passage d ela boucle: t3 = ["Janvier", 31, "Fevrier", 28]
    print t3[1]

    tu vois ce que je veux dire?

    Il faut afficher t3[2*a] et t3[2*a+1] pour voir les deux elements fraichement ajoutés.





    pour finir, voici une autre maniere de construire t3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    t3 = sum(map(list, zip(t2, t1)), [])
    mais une chose à la fois.

    bonne soirée

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut
    Salut !
    Pour le "<=" c'est une grosse bourde de ma part merci, et merci egalemnt pour la piste de reflexion pour l'affichage de la liste, je tacherais de reecrire tout ca demain. Pour ton code merci aussi mais je ne suis pas encore rendu a ce chapitre ! Chaque chose en son temps ^^ !

    Je vous tiens au courant, bonne soirée !

  5. #5
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Salut,
    zip est fait pour ça en python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    >>> t2 = ['Janvier','Février','Mars','Avril','Mai','Juin',"Juillet",'Août','Septembre','Octobre','Novembre','Décembre']
    >>> t3 = zip(t2,t1)
    >>> print t3
    [('Janvier', 31), ('Février', 28), ('Mars', 31), ('Avril', 30), ('Mai', 31), ('Juin', 30), ('Juillet', 31), ('Août
    ctobre', 31), ('Novembre', 30), ('Décembre', 31)]
    Bon courage

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut
    Sincerement merci beaucoup pour vos réponses. Merci DAHTAH pour cette fonction zip. Pour l'instant je pense que le bouquin veut nous faire réfléchir en terme d'algorythmique, plutot que de nous apprendre des commandes. En tout je le garde sous le coude.

    Bon en fait j'ai suivi les recommandations de miawaw. ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # -*- coding:Utf-8 -*-
    t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    t2 = ['Janvier','Février','Mars','Avril','Mai','Juin',"Juillet",'Août','Septembre','Octobre','Novembre','Décembre']
    t3=[]
    a=0
    b=len(t1)
    while a<b:
        t3.append(t2[a])
        t3.append(t1[a])
        print t3[a*2],t3[a*2+1],
        a+=1
    AVec pour résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Janvier 31 Février 28 Mars 31 Avril 30 Mai 31 Juin 30 Juillet 31 Août 31 Septembre 30 Octobre 31 Novembre 30 Décembre 31
    Merci beaucoup en tout cas, et a bientot sur ce forum.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/05/2009, 14h23
  2. [VBA]possible ou pas ? creer une image jpg a partir 7 jpg
    Par sakuraba dans le forum Général VBA
    Réponses: 5
    Dernier message: 03/01/2006, 10h45
  3. Creer une nouvelle Child Frame
    Par Andrenn dans le forum MFC
    Réponses: 2
    Dernier message: 14/02/2005, 12h47
  4. Creer une nouvelle référence pour le driver ODBC
    Par tripper.dim dans le forum Connexion aux bases de données
    Réponses: 3
    Dernier message: 04/01/2005, 22h57

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