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 les éléments d'une liste de mots [Python 2.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 22
    Points : 17
    Points
    17
    Par défaut Supprimer les éléments d'une liste de mots
    Bonjour, je cherche à réaliser une fonction qui à partir d'un texte, découpe le texte et met chaque mot dans un élément d'une liste (jusqu'ici ça va, j'ai utilisé le split), mais je ne veux pas que la liste contienne des mots dont la longueur est inférieure à 3 lettres. J'ai donc écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def FormatListe(txt):
        # Argument : une chaine de caracteres avec uniquement des espaces
        #            et des lettres
        Format = txt.split() 
        i=0
        while i<len(Format):
            if len(Format[i])<3:
                del Format[i]
            i=i+1
        return Format
    PS: Soyez indulgents svp c'est mes débuts en python

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Quand on parcourt une liste, et qu'on détruit tel ou tel élément, on rencontre toujours ce piège, quel que soit le langage. (Je précise cela parce que je pense que tes lacunes ne sont pas des lacunes en python, mais avant tout des lacunes en programmation)

    Si ta phrase est ; "il est beau"
    tu testes le mot n°1 , et tu le supprimes.
    Ta phrase devient "est beau"
    Ensuite, tu testes le mot n°2 : beau, et tu le gardes.

    La phrase résultat est donc "est beau". Le mot "est" n'a jamais été testé.

    La solution pour éviter ce piège est de commencer par la fin de la phrase.
    Tu testes le mot "beau", puis le mot "est" et enfin le mit "il".

    Ainsi, quand tu testes le mot n°X, le mot qui est à cet emplacement est bien celui qui était à cet emplacement dans la phrase d'origine. Tous les mots sont testés.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Intuitivement vous devez vous rendre compte qu'en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        while i<len(Format):
            if len(Format[i])<3:
                del Format[i]
            i=i+1
    vous avez une indice dans une liste qui bouge: quels sont les éléments de la liste qui seront effectivement testés. Rien qu'en relisant, vous devriez voir que ce n'est pas facile de "prédire" ce qui va se passer. Et lorsqu'on ne sait pas "anticiper" ce que feront des instructions, pas facile de "programmer".

    Pour programmer, plutôt que supprimer dans une liste, on peut construire la liste des mots qui vérifient len(mot) > 3. Ou en réfléchissant un peu à la gestion des index s’apercevoir qu'en parcourant la liste à l'envers, on garde la cohérence entre l'index et les mots traités (mais c'est plus compliqué).

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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 22
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses, c'est sûr qu'avec vos connaissances cela vous paraît peut-être évident, et maintenant que vous me l'avez fait remarqué ça l'est pour moi aussi, mais j'avoue que je me suis cassé la tête dessus sans trouver d'où cela venait, merci!

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Data analyste
    Inscrit en
    Décembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Data analyste

    Informations forums :
    Inscription : Décembre 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous et désolé pour le déterrage!

    Je suis novice en Python et j'ai trouver une BdD pour apprendre en m'amusant.

    https://raw.githubusercontent.com/so...iven_names.txt

    Je travaille sur Jupyter. Je parviens à charger le CSV de la data frame (47683 prénoms). Mon but est d'écrire un programme qui éliminera des prénoms selon des critères définis plus bas.

    J'ai besoin d'exclure:

    prénoms avec LI dedans
    prénoms qui commençent par B
    les prénoms avec EAN ou AN ou EN

    Par quoi commencer? Est-ce que je dois ecrire 3 sous fichiers (data + fonctions + le programme en tant que tel)?

    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2016, 14h04
  2. Réponses: 0
    Dernier message: 14/08/2012, 08h03
  3. Réponses: 2
    Dernier message: 05/07/2012, 15h05
  4. Supprimer successivement les éléments d'une liste
    Par Frednight dans le forum Maple
    Réponses: 2
    Dernier message: 18/06/2012, 18h31
  5. Réponses: 12
    Dernier message: 04/03/2007, 11h43

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