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 :

Liste max


Sujet :

Python

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut Liste max
    Bonjour, je débute en Python et j'essaie de fabriquer un programme qui supprime les maxima d'une liste à chaque fois qu'ils apparaissent. Mais mon programme n'a pas l'air de fonctionner comme il faut. Pourriez vous me dire ce qui cloche ? Merci d'avance.


    def supprmax(liste):
    lis=liste
    max=lis[0]
    ind=[0]
    for i in range(0,len(lis)):
    if lis[i]>max:
    max=lis[i]
    ind=[i]
    elif lis[i]==max:
    ind.append(i-1)
    for j in ind:
    del(liste[j])
    return(liste)

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Un code Python sans indentation est illisible: il faut le mettre entre les tag de code en utilisant le '#' en haut et à droite de la fenêtre des messages.

    A part ça, il y a au moins 2 choses qui ne vont pas:

    for i in range(0,len(lis)): ===> for i in range(1,len(lis)): puisque la 1ère valeur est la référence de départ, il ne faut pas la tester.

    Au cas où il y aurait des doublons, la boucle for qui supprime les éléments (del) conduira à des erreurs. En effet, imaginons qu'il faille supprimer les index 2 et 5. Une fois que l'index 2 a été supprimé, l'index 5 n'est plus au même endroit: il est à l'index 4. C'est un piège courant. Il vaut mieux dans ce cas construire une nouvelle liste. On pourrait aussi tenir à jour une valeur k qu'on incrémente à chaque suppression et qui diminue l'indice de boucle =>del(liste[j-k]).

    Je n'ai peut-être pas tout vu: à voir quand le code aura son indentation.

    A noter qu'il est pratique avec Python d'ajouter des "print" partout où on veut voir comment travaille l'algorithme.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    merci pour les corrections, il y avait bien quelques petites choses qui n'allaient pas, notamment au niveau du (del), mais maintenant tout fonctionne correctement
    Merci encore.

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    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 : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> liste
    [7, 5, 4, 2, 7]
    >>> while liste:
    ...     maxi = max(liste)
    ...     print(maxi)
    ...     liste.remove(maxi)
    ... 
    7
    7
    5
    4
    2
    ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour fred1599,

    Le PO avait demandé de critiquer son code, mais ce n'est pas plus mal de lui donner en plus d'autres idées de codage.

    Ton code est une très bonne idée, car il permet de ne pas s'intéresser aux index. Mais il ne fait pas tout: le PO voulait aussi supprimer tous les maxi s'il y en avait plusieurs identiques. Or remove ne supprimera que le 1er. On pourrait faire une boucle qui supprime le max autant de fois qu'il en trouve un. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def supprmax(liste):
        maxi = max(liste)
        while maxi in liste:
            liste.remove(maxi)
        return liste
    C'est effectivement beaucoup plus simple. Avec un exemple comme: liste = [5,6,1,8,9,4,3,2,5], cela donnera en appliquant plusieurs fois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [5, 6, 1, 8, 9, 4, 3, 2, 5]
    [5, 6, 1, 8, 4, 3, 2, 5]
    [5, 6, 1, 4, 3, 2, 5]
    [5, 1, 4, 3, 2, 5]
    [1, 4, 3, 2]
    [1, 3, 2]
    [1, 2]
    [1]
    []
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/01/2010, 16h20
  2. Récuperer le max d'une list
    Par rc.dev2009 dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2009, 14h38
  3. Hauteur max d'une liste déroulée
    Par Guybrush113 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 10/06/2008, 11h09
  4. le max d'une liste
    Par ITM0000 dans le forum Lisp
    Réponses: 6
    Dernier message: 30/05/2007, 21h45
  5. chercher un max et min dans une liste de type vector
    Par sandy07 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 29/05/2007, 15h23

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