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 :

Ajouter un élément dans une liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Ajouter un élément dans une liste
    Bonjour,

    j'ai une liste :

    H = [('2','4'),('5'),('3','1','2'),('4')]

    Sauriez-vous comment faire, s'il vous plait, pour ajouter l'élément '6' au tuple ('3','1','2') situé dans la Liste H.
    Par avance, merci.

    Cordialement,
    Arsène

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Sauriez-vous comment faire, s'il vous plait, pour ajouter l'élément '6' au tuple ('3','1','2') situé dans la Liste H.
    Bonjour

    Un tuple est par nature immuable, donc non modifiable. La seule façon donc de rajouter quelque chose à un tuple est de réécrire un nouveau tuple en prenant les éléments qui t'intéressent du premier => H[2]=H[2] + ('6',).
    Et heureusement que H est lui une liste parce que si ça avait été un tuple lui aussi il aurait fallu utiliser la même astuce mais à un niveau supérieur (style H=H[:2] + (H[2] + ('6',),) + H[3:])

    PS: Je ne sais pas si c'est exprès mais les éléments H[1] et H[3] ne sont pas des tuples mais de simples strings. C'est la virgule et non les parenthèses qui fait le tuple (tu remarqueras par exemple la virgule dans mon + ('6',)). Les parenthèses, même si elles sont fortement conseillées, ne sont pas obligatoires (enfin pas pour un tuple simple) => H = [('2', '4'), ('5',), ('3','1','2'), ('4',)].
    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]

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci beaucoup pour cette information. Je m'en vais donc utiliser un dictionnaire. Dans mon cas, ce sera plus simple. Les dictionnaires peuvent contenir des listes qui peuvent quant à elles être modifiées. Je peux ensuite convertir le dictionnaire en liste. Voici le code en python 3:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    H = {('2', '4'), ('5',), ('3','1','2'), ('4',)}
    Hlist = []
    for key, value in H.items():
        Hlist.append(value)   
    print(Hlist)

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Merci beaucoup pour cette information. Je m'en vais donc utiliser un dictionnaire. Dans ce cas, ce sera plus simple.
    Hum, je suis dubitatif quant à cette conclusion. On n'utilise pas un dictionnaire parce qu'il sera plus simple mais parce qu'il sera le mieux adapté à son algo. Si tu dois traiter tes éléments un par un, alors une liste/tuple. Si maintenant tu dois identifier les éléments par une étiquette alors oui un dictionnaire est plus approprié. C'est comme si tu disais "je n'arrive pas à utiliser ce tournevis, je vais donc utiliser une perceuse ce sera plus simple" alors qu'on ne sait même pas si tu veux visser ou percer un trou (ou même, pourquoi pas, planter un clou). Ce serait mieux si tu disais "j'ai une vis à faire entrer, que dois-je utiliser et comment". Bref le dictionnaire n'est pas un but mais un outil.

    Citation Envoyé par Arsene12 Voir le message
    Les dictionnaires peuvent contenir des listes qui peuvent quant à elles être modifiées.
    Euh je te rappelle que ton "H" du début est une liste donc il est lui-aussi modifiable (ma première solution modifiait H[2]). Et tu aurais pu remplacer les tuples qu'il contenait par des listes qui auraient été elles-aussi modifiables !!!
    Ex:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    H = [['2', '4'], ['5',], ['3', '1', '2'], ['4',]]
    H[2].append('6')

    Et si tu remplis ton dictionnaire de tuples, tu resteras avec le même souci => tu ne pourras pas modifier ses éléments. Bref une liste de tuples ou un dictionnaire de tuples ne change rien => les tuples restent immuables !!!

    Citation Envoyé par Arsene12 Voir le message
    Pour l'instant, j'ai un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    H = {('2', '4'), ('5',), ('3','1','2'), ('4',)}
    Là je ne peux que te conseiller de réouvrir ton cours Python au chapitre où on explique la syntaxe d'un dictionnaire. H={key1 : value, key2 : value, etc}.

    Citation Envoyé par Arsene12 Voir le message
    Mais j'aimerai ensuite transformer le dictionnaire en liste.
    Oui en effet, arrivé là on peut se demander pourquoi faire simple...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    H = {1 : ('2', '4'), 2 : ('5',), 3 : ('3', '1', '2'), 4 : ('4',)}
    Hlist = []
    for value in H.values():
        Hlist.append(value)  
     
    print(Hlist)
     
    H=[('2', '4'), ('5', ), ('3', '1', '2'), ('4', )]
    print(H == Hlist)
    Juste pour que tu constates bien la différence entre le "Hlist" de ce code et le "H" de ton premier code...
    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. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    J'étais en train de faire un programme ayant pout but de créer une liste qui contient elle-même des listes. Ces sous-listes, que je crée en utilisant random et que j'insère au fur et à mesure dans ma liste principale, sont constituées d'un ou de plusieurs éléments.

    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
    nombreElements = random.randint(20,30)           # je choisis le nombre d'éléments de mon dictionnaire (ou de la liste principale)
    print(nombreElements)
    for myL in range(1,3):                           # je fais une boucle pour créer 2 listes
     
       H = {}  					   # je crée un dictionnaire
       for x in range(1, nombreElements):              # pour chaque élément de mon dictionnaire :
          nbreEleInTuple = random.randint(2,5)           # je choisis un nombre au hasard (entre 2 et 5)
          K = []  				             # je crée une liste
          for y in range(1, nbreEleInTuple):             # j'ajoute X (nbreEleInTuple) éléments à cette liste
                ChiffreInTuple = random.randint(1,9)     # Ces éléments qui ne sont autre qu'une série de chiffres générés au hasard
    	    K.append(ChiffreInTuple)                 # que j'ajoute un à un à la liste
          H[x] = K                                       # j'ajoute la liste en tant qu'élément de mon dictionnaire
     
       Hlist = []  				           # je crée une liste
       for key, value in H.items():			   # j'ajoute à ma liste toutes les valeurs de mon dictionnaire
           Hlist.append(value)                          
     
       if myL ==1:                                     # si 1er tour de boucle
          E = Hlist                                    # je crée la liste E
       elif myL==2:                                    # si 2ème tour de boucle
          F = Hlist                                    # je crée la boucle F
    J'aurai pu en effet éviter d'utiliser un dictionnaire et avoir 2 lignes de code en moins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       #H = {}  					   # je crée un dictionnaire
       Hlist = []                                     # je crée une liste
       for x in range(1, nombreElements):
          nbreEleInTuple = random.randint(2,5)
          K = []      
          for y in range(1, nbreEleInTuple):
                K.append(LettreInTuple)
         #H[x] = K                                       # j'ajoute la liste en tant qu'élément de mon dictionnaire
          Hlist.append(K)                             # j'ajoute la liste temporaire K en tant qu'élément de ma liste Hlist
       #for key, value in H.items():
           #Hlist.append(value)
    Merci beaucoup pour ces réflexions.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Citation Envoyé par Arsene12 Voir le message
    H = [('2','4'),('5'),('3','1','2'),('4')]

    Sauriez-vous comment faire, s'il vous plait, pour ajouter l'élément '6' au tuple ('3','1','2') situé dans la Liste H.
    J'étais en train de faire un programme ayant pout but de créer une liste qui contient elle-même des listes.
    Déjà grosse différence avec ton premier post (là c'était une liste qui contenait des tuples). Alors ? Où est le bon code ??? Tu aurais utilisé dès le départ des listes de listes tu n'aurais jamais eu de souci d'ajout...

    Citation Envoyé par Arsene12 Voir le message
    J'aurai pu en effet éviter d'utiliser un dictionnaire et avoir 2 lignes de code en moins :
    Ca ne se compte pas en lignes de code (d'autant plus que moi je compte non pas 2 lignes mais 4 lignes en moins) mais en adéquation des outils face au problème qu'ils doivent résoudre. Sinon on tombe dans le gag de Kaamelott saison2 épisode 25 où Séli tente de choper une souris au maillet et Léodagan lui rétorque "Oui au maillet ou au tir à l'arc l'important c'est le résultat. Vous avez essayé la catapulte ?"

    Là tu crées un dico où les clefs sont des indices séquentiels. Donc en dehors qu'un dico est plus lourd qu'une liste (print sys.getsizeof(dict()), sys.getsizeof(list())) et que l'ordre des éléments restitués n'est pas garanti à l'identique de l'ordre des éléments insérés (donc là déjà dès le départ le dico ne part pas immédiatement vainqueur dans la comparaison) je ne vois pas de différence face à une liste...

    N'oublie pas la philosophie Python
    • Beautiful is better than ugly.
    • Explicit is better than implicit.
    • Simple is better than complex.
    • Complex is better than complicated.
    ...

    Citation Envoyé par Arsene12 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       if myL ==1:                                     # si 1er tour de boucle
          E = Hlist                                    # je crée la liste E
       elif myL==2:                                    # si 2ème tour de boucle
          F = Hlist                                    # je crée la boucle F
    Méfies-toi de ce type d'instruction (E=Hlist) car je ne suis pas certain que tu saches ce que ça fait réellement. Essaye par exemple de rajouter E[1]="toto" puis affiche ensuite F. De plus je ne vois pas trop la raison d'être du elif...
    PS: pour t'éviter ensuite de chercher: E=Hlist[:].
    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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/11/2007, 13h11
  2. Réponses: 8
    Dernier message: 27/04/2007, 14h07
  3. Réponses: 12
    Dernier message: 12/03/2007, 16h58
  4. Correction pour ajouté un élément dans une liste
    Par Rifton007 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2007, 11h09
  5. ajouter un élément dans une liste
    Par Le Mérovingien dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 02/07/2006, 17h43

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