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 :

Problème ajout d'un objet dans une liste Python [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Par défaut Problème ajout d'un objet dans une liste Python
    Bonjour,

    Je souhaite créer une liste qui reprendrait tous les films (repris d'un fichier CSV), sachant que chaque film est un objet Movie.
    Mais, lorsque j'ajoute un objet à la liste, il ajoute bien cet objet mais il n'affiche que la catégorie comedy.

    Voilà la classe :

    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
    25
    class Movie:
     
        # -------------------------------------------------------------------------
        movie_id: int
        movie_imdb: int
        name: str
        actors: List[Actor]
        summary: str
        category: List[str]
     
        # -------------------------------------------------------------------------
        def __init__(self, movie_id: int, name: str, category: List[str]):
     
            self.movie_id = movie_id
            self.movie_imdb = 0
            self.name = name
            self.actors = []
            self.summary = ""
            self.category = category
     
        # -------------------------------------------------------------------------
        def imprimer(self):
            print(self.movie_id)
            print(self.name)
            print(self.category)
    Code pour stocker les films dans la liste :

    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
    f = open ('test_movies.csv')
    fichier_test = csv.reader(f)
    category = []
    tous_les_films = []#Liste qui contiendra l'ensemble des films provenant du fichier movies.csv
     
    for ligne in fichier_test:
     
        category.clear()
        movie_id = ligne[0]
        name = ligne[1]
        category_ligne = ligne[2]
     
        for mot in category_ligne.split("|"):
            category.append(mot)
     
        film = Movie(movie_id, name, category)
        tous_les_films.append(film)
     
    tous_les_films[2].imprimer()
     
    for i in tous_les_films:
        i.imprimer()
    Contenu fichier Csv:

    1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy
    2,Jumanji (1995),Adventure|Children|Fantasy
    3,Grumpier Old Men (1995),Comedy|Romance
    4,Waiting to Exhale (1995),Comedy|Drama|Romance
    5,Father of the Bride Part II (1995),Comedy

    Ce que la console affiche :

    1
    Toy Story (1995)
    ['Comedy']
    2
    Jumanji (1995)
    ['Comedy']
    3
    Grumpier Old Men (1995)
    ['Comedy']
    4
    Waiting to Exhale (1995)
    ['Comedy']
    5
    Father of the Bride Part II (1995)
    ['Comedy']

    Ce qu'elle devrait afficher :

    1
    Toy Story (1995)
    ['Adventure', 'Animation', 'Children', 'Comedy', 'Fantasy']
    2
    Jumanji (1995)
    ['Adventure', 'Children', 'Fantasy']
    3
    Grumpier Old Men (1995)
    ['Comedy', 'Romance']
    4
    Waiting to Exhale (1995)
    ['Comedy', 'Drama', 'Romance']
    5
    Father of the Bride Part II (1995)
    ['Comedy']

    Merci d'avance pour vos réponses

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    C'est parce que tu utilises toujours la même liste et qu'elle n'est passée à Movie que par référence.

    L'attribut category de chaque instance de Movie pointe sur la liste category qui est modifiée pour chaque film.

    D'ailleurs le dernier film de ta liste n'a qu'une catégorie et c'est bien celle qui apparaît dans le print.

    Solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        def __init__(self, movie_id: int, name: str, category: List[str]):
            self.movie_id = movie_id
            self.movie_imdb = 0
            self.name = name
            self.actors = []
            self.summary = ""
            self.category = category[:]

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Par défaut
    Super, merci beaucoup! C'était bien ça!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/08/2017, 11h39
  2. Réponses: 5
    Dernier message: 05/02/2016, 17h21
  3. Ajout objet dans une liste
    Par hbenji dans le forum C#
    Réponses: 7
    Dernier message: 17/03/2013, 15h44
  4. insertion d'objets dans une liste chainee
    Par mathher dans le forum C++
    Réponses: 8
    Dernier message: 20/04/2006, 16h28
  5. [Swing][JList] Placer un Objet dans une liste
    Par Invité dans le forum Composants
    Réponses: 1
    Dernier message: 17/02/2006, 10h31

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