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 :

Supprimer éléments d'une liste contenant un caractère donné [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Octobre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 29
    Points : 26
    Points
    26
    Par défaut Supprimer éléments d'une liste contenant un caractère donné
    Bonjour à tous !

    J'ai un petit programme à réaliser dans le cadre d'un module en Python.
    Je suis débutant dans ce langage, et je rencontre une difficulté que je n'arrive pas à surmonter.

    Voilà l’énoncé du programme :
    Ecrire un programme qui attend une liste L de chaines de caractères et une voyelle V et qui supprime de la liste L toutes les chaines contenant la voyelle V.
    On entrera successivement :
    - le nombre de valeurs de la liste,
    - les valeurs de la liste,
    - la voyelle V.
    Puis le programme affichera la liste finale au format habituel.
    On attend simplement l'instruction print (L)
    Voilà le programme actuellement :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # Variables
    Liste = []
    NombreValeursListe = 0
     
    # Début du programme
    print("=== SUPPRIMER LES MOTS CONTENANT UNE VOYELLE DONNEE ===\n\n")
     
    # L'utilisateur saisi le nombre d'élément que va contenir la liste
    NombreValeursListe = str (input("Entrer le nombre d'éléments dans la liste: "))
    while not (NombreValeursListe.isdigit()):
    	print("Entrer un chiffre !\n")
    	NombreValeursListe = str (input("Entrer le nombre d'éléments dans la liste: "))
    NombreValeursListe = int(NombreValeursListe)
     
    # On créer la liste de la taille voulue
    Liste = [0] * NombreValeursListe
     
    # L'utilisateur saisi les éléments de la liste
    for i in range(0,NombreValeursListe):
        print ("Entrer l'élément N°",i,":")
        Liste[i] = str (input())
     
    # L'utilisateur saisi la voyelle
    Voyelle = str (input("Entrer la voyelle à retirer dans les éléments de la liste: "))
    while not Voyelle in ("a","e","i","o","u","y"):
            print("On attend une voyelle")
            Voyelle = str (input("Entrer la voyelle à retirer dans les éléments de la liste: "))
     
    # On traite la suppression des mots qui contiennent la voyelle
    for i in range(0,NombreValeursListe):
            mot = Liste[i]
            if Voyelle in mot:
                    Liste.remove(mot)
     
    # On affiche la liste une fois traitée
    print(Liste).
    J'obtient une erreur car ma boucle for dépasse la taille de la liste quand elle supprime un mot,
    ce qui est logique mais je ne sais pas comment corriger ce problème...

    Merci d'avance pour votre aide !

  2. #2
    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
    Salut,

    Citation Envoyé par algerino77 Voir le message
    J'obtient une erreur car ma boucle for dépasse la taille de la liste quand elle supprime un mot, ce qui est logique mais je ne sais pas comment corriger ce problème...
    Vous pouvez essayez de:
    • récupérer les mots dans une copie de la liste originale (qui ne bougera pas), ou
    • stocker l'index des mots à supprimer et ajouter une boucle qui les supprimera (dans l'ordre des index décroissants sinon même punition) ou
    • fabriquer une nouvelle liste de mots ne contenant pas la voyelle ou
    • ...

    comme quoi il y a plein de solutions.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Octobre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    [*]récupérer les mots dans une copie de la liste originale (qui ne bougera pas)
    Salut et merci de ta réponse !
    J'ai utilisé cette solution et ça fonctionne parfaitement !

    Encore merci !

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    # Programme : SUPPRIMER LES MOTS CONTENANT UNE VOYELLE DONNEE
    # Enoncé : Ecrire un programme qui attend une liste L de chaines de caractères
    #          et une voyelle V et qui supprime de la liste L toutes les chaines contenant la voyelle V.
     
     
    # Variables
    Liste1 = []
    Liste2 = []
    NombreValeursListe = 0
     
    # Début du programme
    print("=== SUPPRIMER LES MOTS CONTENANT UNE VOYELLE DONNEE ===\n\n")
     
    # L'utilisateur saisi le nombre d'élément que va contenir la liste
    NombreValeursListe = str (input("Entrer le nombre d'éléments dans la liste: "))
    while not (NombreValeursListe.isdigit()):
    	print("Entrer un chiffre !\n")
    	NombreValeursListe = str (input("Entrer le nombre d'éléments dans la liste: "))
    NombreValeursListe = int(NombreValeursListe)
     
    # On créer la liste de la taille voulue
    Liste1 = [0] * NombreValeursListe
     
    # L'utilisateur saisi les éléments de la liste
    for i in range(0,NombreValeursListe):
        print ("Entrer l'élément N°",i,":")
        Liste1[i] = str (input())
     
    # L'utilisateur saisi la voyelle
    Voyelle = str (input("\nEntrer la voyelle à retirer dans les éléments de la liste.\nAttention, la saisie est sensible à la case !! : "))
    while not Voyelle in ("a","e","i","o","u","y","A","E","I","O","U","Y"):
            print("Entrer une voyelle !")
            Voyelle = str (input("\nEntrer la voyelle à retirer dans les éléments de la liste.\nAttention, la saisie est sensible à la case !! : "))
     
    # On traite la suppression des mots qui contiennent la voyelle grace à une deuxième liste
    for i in range(0,NombreValeursListe):
            if Voyelle in Liste1[i]:
                    Liste1.append(Liste1[i])
            else:
                    Liste2.append(Liste1[i])
     
    # On affiche la liste une fois traitée
    print("\nNous avons supprimé les mots contenant la voyelle suivante :",Voyelle,"\nLa nouvelle liste est la suivante :")
    print(Liste2)

  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
    Salut,

    Citation Envoyé par algerino77 Voir le message
    J'ai utilisé cette solution et ça fonctionne parfaitement !
    En fait vous avez mélangé deux solutions et on ne comprend pas trop ce que vous avez voulu faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in range(0,NombreValeursListe):
            if Voyelle in Liste1[i]:
                    Liste1.append(Liste1[i])
            else:
                    Liste2.append(Liste1[i])
    Pourquoi faire Liste1.append(Liste1[i])?
    Plus simple aurait été:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in range(0,NombreValeursListe):
            if Voyelle not in Liste1[i]:
                   Liste2.append(Liste1[i])
    Un peu plus lisible serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range(0,NombreValeursListe):
            mot = Liste1[i]
            if Voyelle not in mot:
                   Liste2.append(mot)
    ou encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for mot in Liste1:
            if Voyelle not in mot:
                   Liste2.append(mot)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Octobre 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    Effectivement ça fait moins de ligne et c'est plus compréhensible.

    Je tacherai de m'en souvenir pour la suite.

    Merci encore !

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

Discussions similaires

  1. supprimer élément d'une liste
    Par jojo971 dans le forum Général Python
    Réponses: 8
    Dernier message: 26/11/2011, 10h47
  2. Supprimer élément d'une liste après un query sql
    Par gégé140488 dans le forum Hibernate
    Réponses: 1
    Dernier message: 27/09/2010, 12h25
  3. Réponses: 1
    Dernier message: 22/01/2007, 20h33
  4. Réponses: 3
    Dernier message: 25/10/2006, 19h08
  5. Supprimer des éléments d'une liste
    Par espadon1 dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2006, 15h08

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