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 :

parcourir liste avec 2 indices


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Par défaut parcourir liste avec 2 indices
    Bonjour, je souhaite écrire un programme qui enlève les doublons sur une chaîne de caractère. Je suis débutant et j'ai un message d'erreur index out of range en utilisant ce programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    m=str(input("entrer votre mélodie"))
    liste=list(m)
    for i in range(len(liste)-1):
        if liste[i]==liste[i+1]:
            liste.remove(liste[i])
            liste.remove(liste[i+1])
    print(liste)
    ce qui cloche c'est à la ligne du if mais je ne comprends pas pourquoi
    je vous remercie.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Parcours la liste à l'envers.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Par défaut
    merci pour ta réponse, j'ai essayé ce code mais il y a le même message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    m=str(input("entrer votre mélodie"))
    liste=list(m)
    for i in range(len(liste)-1,0,-1):
        if liste[i]==liste[i+1]:
            liste.remove(liste[i])
            liste.remove(liste[i+1])
    print(liste)

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 35
    Par défaut
    Bonjour,

    Citation Envoyé par sparrow88 Voir le message
    Bonjour, je souhaite écrire un programme qui enlève les doublons sur une chaîne de caractère. Je suis débutant et j'ai un message d'erreur index out of range en utilisant ce programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    m=str(input("entrer votre mélodie"))
    liste=list(m)
    liste=set(liste)
    ?


    Je ne sais pas s'il s'agit d'une formulation ou pas mais ta phrase indique que tu cherches à supprimer les doublons d'une chaîne de caractères tandis que ton code indique que tu veux supprimer les lettres identiques mises côte à côte.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Par défaut
    merci, mais je voudrais comprendre pourquoi il y a un message d'erreur lorsque je parcours la liste

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 35
    Par défaut
    Citation Envoyé par sparrow88 Voir le message
    merci, mais je voudrais comprendre pourquoi il y a un message d'erreur lorsque je parcours la liste
    Admettons que ta chaine soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m = 'aabbccdd'
    liste = list(m)
    Donc len(liste) = 8

    Du coup ton For cherches à boucler 8-1 fois.
    Or tu vas supprimer 4 occurrences.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    liste = ['a','b','c','d']
    Mais ta boucle For voudra poursuivre la lecture jusqu'à la 8ème valeur de la liste (pour liste.remove(liste[i+]) qui n'en contient désormais que 4.
    --> Index out of range

  7. #7
    Expert confirmé

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

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

    Ce n'est pourtant pas compliqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    liste = ['a', 'b', 'd', 'e']            # len(liste) = 4
    for i in range(len(liste)-1, 0, -1):    # équivalent à for i in [3, 2, 1]
        if liste[i] == liste[i+1]:          # équivalent à if liste[3] == liste[4] ou encore if 'e' == out of range
    CQFD

    il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(len(liste)-2, -1, -1):

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    À part set qui est la solution la plus simple, celle qui suit serait de créer une mémoire est de vérifier si la lettre n'a pas déjà été enregistrée dans cette mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> m = 'aabbccdd'
    >>> memory = []
    >>> for letter in m:
    ...     if letter not in memory:
    ...         memory.append(letter)
    ... 
    >>> ''.join(memory)
    'abcd'

Discussions similaires

  1. [Python 3.X] Déplacement de terme d'une liste vers une autre liste avec un indice différent
    Par PoelQ dans le forum Général Python
    Réponses: 5
    Dernier message: 09/01/2015, 22h06
  2. Parcourir liste quelque soit l'indice
    Par Paulo62 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/07/2011, 15h52
  3. Réponses: 2
    Dernier message: 18/06/2010, 15h39
  4. Liste chainee avec index/indices
    Par eagl1 dans le forum C++
    Réponses: 19
    Dernier message: 20/10/2009, 21h12
  5. parcourir une List avec différents objets
    Par laurentlorient dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 03/08/2009, 09h34

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