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 :

List remove ' ' [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 45
    Par défaut List remove ' '
    Bonjour,

    Je voulais savoir comment supprimer des éléments d'une liste qui est elle même dans une liste. J'aimerais supprimer les éléments vides ' ' qui sont présent dans mot[1] Voici mon code et la sortie:

    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
    import pandas as pd
    df=pd.read_excel('mots.xlsx', keep_default_na=False)
     
    Titres=list(df.columns)
     
    mot=list()     
    for i in range(0,len(Titres)):
        print(i)
        mot.insert(i,list(df[Titres[i]]))
    print(mot)
     
    for j in range(0,len(mot)):
        mot[j].remove('')
     
    0
    1
    [['Bol bleu', 'bol rouge', 'bol vert'], ['assiette verte', '', '']]
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-74-4fafed27c4a3> in <module>()
         10 print(mot)
         11 for j in range(0,len(mot)):
    ---> 12     mot[j].remove('')
     
    ValueError: list.remove(x): x not in list
    Je comprends que dans mot[0] l'élément ' ' n'est pas présent d'où ce résultat mais je ne sais pas faire autrement.
    (je suis débutant)
    Je vous en remercie !

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Suntory Voir le message
    Je comprends que dans mot[0] l'élément ' ' n'est pas présent d'où ce résultat mais je ne sais pas faire autrement.
    (je suis débutant)
    Même débutant, tu aurais pu trouver tout seul qu'il t'est possible de tester la présence de la chaine vide avant de demander son effacement
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for j in range(0,len(mot)):
        while "" in mot[j]:
            mot[j].remove('')
    # for

    Autre possibilité (qui n'est, je te l'accorde, pas intuitive pour un débutant): utiliser la procédure essai/echec souvent préconisée en Python
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for j in range(0,len(mot)):
        while True:
            try:
                mot[j].remove('')
            except ValueError:
                break
            # try
        # while
    # for

    Cette façon de faire est assez souvent préconisée dans les cas où on ne peut pas tout prévoir: on ne s'embête donc pas à essayer de prévoir l'imprévisible => on tente l'action et si l'action ne se fait pas, on récupère alors l'exception qui l'a bloquée. Bref on dit souvent qu'en Python il vaut mieux demander pardon que permission.
    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 éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Par défaut
    Juste pour préciser, le recours au range est inutile dans ce cas, c'est justement une des élégances de ce langage.

    Les listes étant des références d'objets (itemMot est une référence vers l'item de mot en cours dans la boucle for, ce qui veut dire que les modifications faites dans la liste sont persistantes), ce qui précède peut donc être simplifié :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for itemMot in mot:
        while '' in itemMot:
            itemMot.remove('')

    Par contre, il n'est pas approprié de faire un remove() sur une liste alors qu'on est en cours d'une boucle for sur cette liste.

    Ajoutons également pour la compréhension du débutant que le while est nécessaire car remove() ne retire qu'un élément de liste.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par jmbain Voir le message
    Juste pour préciser, le recours au range est inutile dans ce cas, c'est justement une des élégances de ce langage.
    Simplifions encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for itemMot in mot:
        itemMot[:] = [ e for in itemMot if e ]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Par défaut
    Pour être tout à fait complet, voici un exemple de code (il y avait une faute de frappe dans ton exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mot = [['Bol bleu', 'bol rouge', 'bol vert'], ['assiette verte', '', '']]
    for itemMot in mot:
        itemMot[:] = [ e for e in itemMot if e ]
    print(mot)
    C'est une autre façon de faire très utilisée.
    J'aime beaucoup les compréhensions de listes ([ e for e in itemMot if e ]), mais pas tellement itemMot[:] qui heurte mon côté littéraire.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    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 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jmbain Voir le message
    Par contre, il n'est pas approprié de faire un remove() sur une liste alors qu'on est en cours d'une boucle for sur cette liste.
    Oui, sur une liste sur laquelle on itère. Mais le while "" in liste ce n'est pas une itération, c'est un test, test sur une liste réactualisée à chaque fois qu'elle est testée...
    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]

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Par défaut
    Exact, ma phrase manquait de précision.
    Dans une boucle for, on agit pas sur la liste objet de la boucle.
    Dans un while, on fait ce qu'on veut, à condition de gérer la complexité qui en découle.

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

Discussions similaires

  1. [vb2005] problème avec list.remove
    Par Kropernic dans le forum VB.NET
    Réponses: 15
    Dernier message: 27/10/2010, 15h32
  2. std::list remove & delete
    Par Goundy dans le forum SL & STL
    Réponses: 1
    Dernier message: 25/12/2008, 13h06
  3. gtk list store remove
    Par labrute dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 25/04/2008, 10h03
  4. Réponses: 7
    Dernier message: 22/06/2007, 10h56
  5. remove() objet d'une liste.
    Par david06600 dans le forum Langage
    Réponses: 19
    Dernier message: 12/12/2006, 12h11

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