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 :

Occurence de caractères


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 4
    Par défaut Occurence de caractères
    Bonjour, je dois créer une fonction caracteres_occurrences(l) qui retourne un dictionnaire contenant pour chaque caractère dans les différentes chaînes de caractères les indices des chaînes qui contiennent le caractère au moins une fois.

    Par exemple, avec la liste : l = ["ceci n'est pas une pipe", "le fils de l'homme", "golconda"] , la fonction doit me renvoyer le dictionnaire :

    d = {'c': [0,2], 'e': [0,1], 'i': [0,1], ' ': [0,1], 'n': [0,2], "'": [0,1], 's': [0,1], 't': [0], 'p': [0], 'a': [0,2], 'u': [0], 'f': [1], 'l': [1,2], 'd': [1,2], 'h': [1], 'o': [1,2], 'm': [1], 'g': [2]}

    -> le 'c' se retrouve au moins une fois dans l[0] et dans l[2] ; le 'e' se retrouve au moins une fois dans l[0] et dans l[1], ...

    Le problème est qu'avec mon code, la fonction ne me renvoie que le dernier indice de la liste dans lequel le caractère se retrouve :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def caracteres_occurences(l) :
        d = {}
        long = len(l)
        for i in range (long) :
            for j in l[i] :
                d[j] = [i]
        return d
    => me renvoie : {'c': [2], 'e': [1], 'i': [1], ' ': [1], 'n': [2], "'": [1], 's': [1], 't': [0], 'p': [0], 'a': [2], 'u': [0], 'l': [2], 'f': [1], 'd': [2], 'h': [1], 'o': [2], 'm': [1], 'g': [2]}

    Comment faire pour prendre en compte tous les indices ?

  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
    Bonjour,

    Un exemple permettant d'avoir chaque lettre unique d'un mot,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s = "ceci n'est pas une pipe"
    >>> letters = set(s)
    >>> letters
    {'a', 'p', 's', 'c', ' ', 'u', 'n', 't', "'", 'e', 'i'}
    Ensuite vous avez un dictionnaire, où vous testez si chaque clé est présente, et si ce n'est pas le cas, à ajouter au dictionnaire.

    P.S Donc dans votre proposition de code, il manque le cas où la lettre est déjà présente dans le dictionnaire, et l'ajouter à votre liste représentant la valeur du dictionnaire.
    En gros vous écrasez la précédente valeur, d'où des listes de taille 1 à chaque fois.

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    pour la frime:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    l = ["ceci n'est pas une pipe", "le fils de l'homme", "golconda"]
    d = {i:[j for j in range(len(l)) if i in l[j]] for i in dict.fromkeys(set(''.join(l)), 0)}
    sinon au delà des boucles imbriquées comment/par quel bout/etc. la petite difficulté ici réside dans le fait d'étendre un dictionnaire et/ou une liste

    pour étendre une liste il y a la méthode .append(), pour les dictionnaires c'est différent, on peut se contenter d'assigner une valeur à une nouvelle clé dico[newkey] = newvalue, mais ici le propos est d'incrémenter la valeur, et il va donc falloir tester si la clé existe déjà dans le dictionnaire ou s'il s'agit d'une nouvelle clé à créer

    de manière générale une bonne façon d'appréhender l'algorithme de notre programme est de commencer par faire l'opération à la main, "comment je m'y prendrai (intellectuellement) pour faire ce que fait le programme ?", ce qui permet d'avoir une meilleure idée des étapes à réaliser, dans quel ordre, comment tourner la chose etc.

  4. #4
    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
    pour la frime:
    et le zen de python ?

    Par rapport à la solution simple, elle est en plus deux fois moins efficace !

    Simple is better than complex

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    et le zen de python ?
    j'avoue ne l'avoir jamais lu (probablement parce que je ne suis pas développeur et que je me sens pas concerné), et puis le zen de python c'est plutôt quand on veut donner la solution au PO

    à la limite je serais plutôt issu de la sécurité, dans laquelle l'obfuscation de code fait partie des choses assez classiques, ajoute à ça que j'ai toujours été friand de ces bestioles hideuses telles le IOCCC, les one-liners, les quines ou les codes polyglottes, et étrangement je le vis bien

    ce que j'aime là dedans c'est justement la difficulté de créer ce genre de code, c'est pas un gros challenge, mais ça force à une gymnastique mentale qui n'a rien d'intuitif, et ça me plait

    pour autant quand le besoin l'exige je suis capable de pondre du code lisible et consensuel, je suis sûr que ça a même dû m'arriver sur ces forums...

    Citation Envoyé par fred1599 Voir le message
    Par rapport à la solution simple, elle est en plus deux fois moins efficace !
    ah ? je ne me suis pas posé la question en ces termes (c'est pas fait pour), mais j'ai quand même un gros doute, ce serait quoi ton implémentation simple et 2x plus efficace ? (éventuellement en pv)

  6. #6
    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
    Je t'envoie ça en MP, je pense que c'est la solution adaptée pour le PO.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/08/2011, 15h37
  2. [Source] Analyser la fréquence d'occurence de caractères
    Par M.Dolly dans le forum Contribuez
    Réponses: 3
    Dernier message: 01/09/2009, 11h23
  3. [TPW] Afficher le nombre d'occurences de caractère
    Par miliassouma6600 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 16/05/2009, 12h06
  4. Réponses: 5
    Dernier message: 05/11/2008, 06h43
  5. Remplacement d'occurence de caractères
    Par klingc dans le forum Langage
    Réponses: 26
    Dernier message: 12/09/2008, 15h54

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