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 :

apprentissage liste : suppression d'un élément


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Par défaut apprentissage liste : suppression d'un élément
    Bonjour,

    [(15,), (abc,), ('',)]

    je souhaite supprimer la valeur vide ('',)
    le code ci-dessous ne fonctionne pas : j'arrive à supprimer les deux premiers...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nb = len(result)
    print(nb)
     
    for i in range(0, nb-1):
        if result[i] == ('',):
            result.pop(i)
        else:
            print(result[i])
    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Il existe des fonctions pour cela, avez-vous le droit de les utiliser ?

    Sinon ton code ne fonctionne pas car l’élément que tu veux supprimer est le dernier or ta boucle ne traite pas le dernier élément...

    Il faudrait remplacer for i in range(0, nb-1): par for i in range(0, nb):...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Par défaut
    merci

    pour les fonctions, je suis preneur car je découvre !

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Ton code fonctionne si tu corriges le point que je t'ai indiqué...

    Mais sinon tu peux faire juste ça : result.remove(('',))...

  5. #5
    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 aaristocat Voir le message
    [(15,), (abc,), ('',)]

    je souhaite supprimer la valeur vide ('',)
    le code ci-dessous ne fonctionne pas : j'arrive à supprimer les deux premiers...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nb = len(result)
    print(nb)
     
    for i in range(0, nb-1):
    if result[i] == ('',):
        result.pop(i)
    else:
        print(result[i])
    En dehors des remarques sur les limites de ta boucle, il y en a 2 de plus
    1. pop sert à récupérer un élément et à l'effacer de la liste. Effectivement comme toi tu veux l'effacer ça te convient mais la partie "récupération" n'est pas utilisée. Dans ce cas, autant utiliser alors del() qui supprime simplement.
    2. on ne modifie jamais une liste sur laquelle on est en train d'itérer. Ou alors on n'itère pas sur la liste qu'on est en train de modifier. Parce que la modification change la liste. Il se trouve que dans ce cas précis ça marche parce que tu supprimes le dernier élément. Mais si jamais tu supprimes par exemple l'élément [0], alors le second devient [0], le 3° devient élément [1] et etc. Ensuite tu passes à l'itération suivante (donc l'itération [1]) et là, au lieu de traiter le second élément, tu traites alors le 3°. Résultat tu ne traites qu'un élément sur 2 et au final tu finis avec un "IndexError list index out of range" quand tu veux traiter l'élément [x] qui n'existe déjà plus alors qu'il existait quand tu as commencé ta boucle.
      Donc pour faire ce genre de traitement, il y a plusieurs façons de faire. Par exemple recréer une liste neuve en récupérant de l'ancienne ce que tu veux plutôt que de tenter d'y enlever ce que tu ne veux pas. Ou alors tu peux écrire while "" in result: del(result[result.index("")]).
      Ou encore boucler sur un algo essai/echec
      Code python : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      while True:
          try: x=result.index("")
          except ValueError: break
          else: del(result[x])
      # while
      Ou (dans ce cas précis) la méthode proposée par Beginner et justement dédiée à ce genre de travail. Mais surtout ne pas boucler sur une liste que tu modifies dans la boucle (ou ne pas modifier la liste sur laquelle tu boucles).
    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]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Par défaut
    merci pour ces conseils que je retiendrais

    Je poursuis mon apprentissage.

    Maintenant je souhaite caster les éléments en INT

    j'ai un message d'erreur et ne comprends pas pourquoi ?

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

    Citation Envoyé par aaristocat Voir le message
    j'ai un message d'erreur et ne comprends pas pourquoi ?
    Le message d'erreur vous explique déjà pourquoi!
    Et maliste[1] étant le tuple (-20,) vous devriez le comprendre.

    note: dans les tutos, vous avez des exercices corrigés et des tas d'explications.

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

  8. #8
    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 aaristocat Voir le message
    Maintenant je souhaite caster les éléments en INT
    Et que représente, pour toi, l'opération "caster un tuple (ex (1, 2, 3)) en int" ? Comment tu imagines le résultat ?
    Citation Envoyé par aaristocat Voir le message
    j'ai un message d'erreur et ne comprends pas pourquoi ?
    Parce que tout comme toi, Python ne sait pas faire ce genre d'opération. Et comme le dit wiztricks, le message d'erreur est quand-même très explicite.
    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]

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lst = [(15,), (30,), (-6,)]
    donc j'ai une liste de tuple
    je veux la transformer en liste int pour par exemple calculer la moyenne
    après des heures de recherche j'ai trouvé plusieurs solutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [i[0] for i in lst]
    #donne
    [15, 30, -6]
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     list(zip(*lst)[0])
    merci à vous tous

  10. #10
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    une méthode que j'aime bien pour mettre à plat une liste de liste c'est avec sum:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> lst = [(15,), (30,), (-6,)]
    >>> sum(lst, ())
    (15, 30, -6)
     
    >>> lst = [(1, 2), (3,4)]
    >>> sum(lst, ())
    (1, 2, 3, 4)
    cependant je pense qu'ici avant de trouver la solution un algo mettant sur papier la logique serait bien venu, vous pouvez même poussez le vice avec des listes n'ayant pas du tout la même profondeur du style l = [0, [], [5, [6, 7], [[5, 4], 9]]] qui pourrait donc donner [0, 5, 6, 7, 5, 4, 9](oui je sais , elle est pas sympa cette liste )

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par aaristocat Voir le message
    donc j'ai une liste de tuple
    je veux la transformer en liste int pour par exemple calculer la moyenne
    Tu n'as pas transformé une liste de tuples en liste d'entiers (dans le sens transformer chaque tuple en entier car cela n'a pas de sens comme Sve@r a voulu te le faire comprendre)... Ce que tu as fait c'est pendre le premier élément de chaque tuple de la liste de tuple pour les mettre dans une liste et comme le premier élément de chaque tuple est un entier tu obtiens au final une liste d'entier...

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/10/2006, 15h33
  2. [JDOM] Recpérer une liste de tous les éléments d'un fichier XML
    Par adilo dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 30/08/2006, 10h15
  3. Réponses: 4
    Dernier message: 23/09/2005, 13h29
  4. [Liste] Savoir si un élément est présent dans une liste
    Par Wookai dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 02/05/2005, 20h44

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