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 :

Compter les occurences des éléments d'une liste sans passer par "Counter" [Python 2.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
    Octobre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 22
    Par défaut Compter les occurences des éléments d'une liste sans passer par "Counter"
    Bonjour,
    Est-ce que quelqu'un parmi vous sait comment faire pour compter les occurences des éléments d'un liste (les éléments sont des mots), sans forcément qu'après avoir fait les "comptes" les éléments soit classés du plus occurent au moins occurent.
    Merci d'avance

  2. #2
    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
    • Avec un dictionnaire
    • Avec la méthode count
    • ...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 22
    Par défaut
    J'ai utilisé cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def f2(liste):
        compte = {k: liste.count(k) for k in set(liste)}
        return compte
    Mais je n'ai pas bien compris la syntaxe, et après avoir fait ça je n'ai aucune idée de comment organiser les éléments du plus au moins occurent.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le problème, c'est que les clés d'un dictionnaire sont "hashés" pour rendre la recherche très rapide, et qu'il n'est donc pas possible de leur donner un ordre particulier.

    Je vois deux solutions pour ordonner les résultats:

    - utiliser un dictionnaire ordonné: OrderedDict du module collections

    - rester dans un format de "liste de listes" et ordonner les éléments comme on veut.

    1ère solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from collections import OrderedDict
     
    liste = [1,2,2,2,3,4,5,5,6]
     
    compte = {k: liste.count(k) for k in set(liste)}
     
    compte = OrderedDict(sorted(list(compte.items()), key=lambda v:v[1], reverse=True))
     
    print(compte)
     
    OrderedDict([(2, 3), (5, 2), (1, 1), (3, 1), (4, 1), (6, 1)])
    2ème solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    liste = [1,2,2,2,3,4,5,5,6]
     
    compte = [[k, liste.count(k)] for k in set(liste)]
     
    compte.sort(key=lambda v:v[1], reverse=True)
     
    print(compte)
     
    [[2, 3], [5, 2], [1, 1], [3, 1], [4, 1], [6, 1]]

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 22
    Par défaut
    Effectivement tyrtamos j'ai remarqué que les dictionnaires était non-modifiables c'est pour ça que je ne voyais pas de solutions
    Bon je vais vous expliquer la consigne que j'ai eu pour que ce soit plus clair.
    Je dois :
    Ecrire une fonction qui compte les occurences de tous les mots d'une liste. Cette fonction renvoit une liste de mots associés à leurs occurences.
    Ecrire une fontion qui, à partir d'une liste de mots suivi du nombre de ses occurences, classe cette liste en fonction du nombre des occurences des différents mots, du plus fréquent au moins fréquent.


    Le problème, c'est que j'ai utilisé la fonctionnalité "Counter" importée depuis "collections", qui permettait de compacter ces deux fonctions en une seule, maisj'ai envoyé un mail à mon prof, et il m'a dis que le but du projet était de réaliser ces fonctions par nous-même, or j'ai fait plusieurs tests (rien de concluant), et je ne vois toujours pas comment réaliser la première fonction.

    Si tu as une idée tyrtamos je suis preneur!

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par AlexBsd Voir le message
    Si tu as une idée tyrtamos je suis preneur!
    Mais tu as déjà tout avec le code précédent!

    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
    liste = [1,2,2,2,3,4,5,5,6]
     
    def fonc1(liste):
        """Compte les éléments de la liste en retournant une liste de listes:
           [..., [élément, nombre], ...]
        """
        return [[k, liste.count(k)] for k in set(liste)]
     
    def fonc2(lliste):
        """trie la liste de listes dans l'ordre dégressif du 2ème élément
           des sous-listes
        """
        return sorted(lliste, key=lambda v:v[1], reverse=True)
     
    lliste = fonc1(liste)
    print(lliste)
    [[1, 1], [2, 3], [3, 1], [4, 1], [5, 2], [6, 1]]
     
    lliste2 = fonc2(lliste)
    print(lliste2)
    [[2, 3], [5, 2], [1, 1], [3, 1], [4, 1], [6, 1]]

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/05/2013, 09h39
  2. Réponses: 1
    Dernier message: 13/05/2013, 20h52
  3. Réponses: 2
    Dernier message: 11/05/2013, 12h19
  4. Réponses: 1
    Dernier message: 02/05/2013, 20h19
  5. [Débutant] Atteindre les champs des éléments d'une liste
    Par DomotiKologue dans le forum SharePoint
    Réponses: 2
    Dernier message: 17/07/2012, 10h41

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