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 :

comportement des listes [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 16
    Points : 15
    Points
    15
    Par défaut comportement des listes
    Bonjour,
    Je vous soumets un petit programme en console. Je crée une liste de liste de deux façons différentes.
    Les deux listes semblent identiques.
    Je commande Liste[x][y] sur les deux listes créées et je n'ai pas le même résultat.
    Avez-vous une idée: comment expliquer rationnellement ces deux résultats différents?
    Merci
    Pascalou

    Le code:
    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
    22
    23
    24
     
    Liste1=[[0]*5]*3
    print(Liste1)
     
    Liste2=[[0,0,0,0,0]]
    Liste2.append([0,0,0,0,0])
    Liste2.append([0,0,0,0,0])
    print(Liste2)
     
    if Liste1==Liste2:
        print("listes identiques")
    else:
        print("listes différentes")
     
    Liste1[1][2]=4
    print(Liste1)
     
    Liste2[1][2]=4
    print(Liste2)
     
    if Liste1==Liste2:
        print("listes identiques")
    else:
        print("listes différentes")

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est un peu déconcertant au début. Le "[0]*5" fonctionne correctement, mais le "*3" situé après ne recopie pas 3 fois la 1ère liste mais seulement 3 fois son adresse! C'est pour ça que la modification de l'une des valeurs se répercute automatiquement sur les 3 sous-listes.

    Voilà une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Liste1 = [[0]*5 for i in range(0,3)]
    C'est expliqué dans la doc: https://docs.python.org/3/faq/progra...mensional-list
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    C'est effectivement déconcertant.
    Merci bien pour votre réponse.
    Passy261

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Passy261 Voir le message
    C'est effectivement déconcertant.
    Prenez un objet A et faites une liste L = [ A, A, A], normal que changer A modifie le contenu de tous les éléments de la liste.
    Après c'est une question d'écriture: [[0]*5]*3 équivaut à [ A, A, A ] alors que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Liste2=[[0,0,0,0,0]]
    Liste2.append([0,0,0,0,0])
    Liste2.append([0,0,0,0,0])
    équivaut à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A = [0,0,0,0,0]
    B = [0,0,0,0,0]
    C = [0,0,0,0,0]
    liste2 = [ A, B, C ]
    car égalité et identité entre objets sont des relations différentes.

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

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

Discussions similaires

  1. Comportement des listes en Java
    Par JeanNoel53 dans le forum NetBeans
    Réponses: 5
    Dernier message: 09/11/2010, 15h17
  2. [Débutant] Création de menu comportant des listes deroulantes
    Par diapa dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/07/2010, 17h11
  3. comportement des list
    Par Plomeg dans le forum C++
    Réponses: 2
    Dernier message: 10/03/2008, 21h44
  4. [XUL] Comportement des images dans les listes item
    Par Christophe Charron dans le forum Autres langages pour le Web
    Réponses: 1
    Dernier message: 02/03/2007, 12h50
  5. Comportement différent des listes [] et des tuples () ??
    Par JujuKéblo dans le forum Général Python
    Réponses: 2
    Dernier message: 12/10/2005, 09h08

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