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 :

fonction pour ajouter une occurrence


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2021
    Messages : 7
    Par défaut fonction pour ajouter une occurrence
    Bonjour

    En gros j'ai une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L =[ '3', '4','3','1','2','1','1','1','0','1']
    et une autre liste qui tri L pour donner le nombre de fois qu'apparait un caractère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste =[( '3' ,2) , ('4' ,1) , ('1' ,5) , ('2' ,1)]
    (il y a deux '3', un '4' etc.)



    Il faut donc que je crée une fonction qui ajoute un '1' dans L et que la liste soit donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste =[( '3' ,2) , ('4' ,1) , ('1' ,6) , ('2' ,1)]
    .

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

    Avec Python, Counter fait déjà le boulot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> from collections import Counter
    >>> Counter(L)
    Counter({'1': 5, '3': 2, '4': 1, '2': 1, '0': 1})
    >>> Counter(L).items()
    dict_items([('3', 2), ('4', 1), ('1', 5), ('2', 1), ('0', 1)])
    >>>
    après si c'est un exercice à faire sans les dictionnaires ni Counter, ben, il va falloir réfléchir à un algorithme qui... avant de coder.

    Sinon pour remplacer l'élément d'une liste par autre chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> L[0] = (L[0], 1)
    >>> L
    [('3', 1), '4', '3', '1', '2', '1', '1', '1', '0', '1']
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2021
    Messages : 7
    Par défaut
    Déjà, merci de ta réponse aussi rapide.

    En fait, quand j'essaye d'ajouter 1 dans la liste L je faisMais au lieu de m'ajouter le '1' dans la liste, il se met dans la liste de tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [('3', 2), ('4', 1), ('1', 5), ('2', 1), 1]
    Et ensuite j'aimerais ne pas mettre de valeur dans la fonction, elle se mettrait quand je met """nomdelafonction('1', liste)""" . En gros j'aimerais faire
    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
    def ajouter (s , L):
        """ ajoute une occurrence de s dans L"""
        L.append(1)
        return L
     
     
     
    liste =[( '3' ,2) , ('4' ,1) , ('1' ,5) , ('2' ,1)]
    print (" liste : ", liste )
     
    ajouter ('1', liste )
    print (" liste : ", liste )
    """ [( '3', 2) , ('4', 1) , ('1', 6) , ('2', 1)]"""
     
    ajouter ('0', liste )
    """[( '3', 2) , ('4', 1) , ('1', 6) , ('2', 1) , ('0', 1)]"""
    print ( liste )
    PS: j'ai le droit d'utiliser les dictionnaires et les Counter ben

  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,

    Ce genre de problème est facile à résoudre avec un dictionnaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    L =[ '3', '4','3','1','2','1','1','1','0','1']
    dico = {}
    for x in L:
        if x in dico: # x est déjà une clé de dico
            dico[x] += 1 # on ajoute 1 à la valeur qu'elle a déjà
        else:
            dico[x] = 1 # x n'est pas une clé de dico: on la crée avec la valeur 1
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(dico)     
    {'3': 2, '4': 1, '1': 5, '2': 1, '0': 1}
    Ou si on veut une "liste de listes":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print(list(dico.items()))            
    [('3', 2), ('4', 1), ('1', 5), ('2', 1), ('0', 1)]

  5. #5
    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
    Citation Envoyé par foudrixe Voir le message
    PS: j'ai le droit d'utiliser les dictionnaires et les Counter ben
    Dans ce cas, il suffit de les utiliser.

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

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par foudrixe Voir le message
    Citation Envoyé par foudrixe Voir le message
    En gros j'ai une liste L =[ '3', '4','3','1','2','1','1','1','0','1']
    En fait, quand j'essaye d'ajouter 1 dans la liste L je fais L.append(1) mais au lieu de m'ajouter le '1' dans la liste, il se met dans la liste de tri:[('3', 2), ('4', 1), ('1', 5), ('2', 1), 1]
    Cela signifie que, contrairement à ton premier post "L" ne contient pas la liste telle que mentionnée. Ou alors s'il l'a contenue, à un moment donné il l'a perdue. Probablement que tu as dû écrire quelque part L=traitement(L).

    Accessoirement ta liste initiale ne contient pas des nombres mais des strings. Donc c'est L.append("1") qu'il faut écrire si tu veux rester cohérent.

    Citation Envoyé par tyrtamos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if x in dico: # x est déjà une clé de dico
        dico[x] += 1 # on ajoute 1 à la valeur qu'elle a déjà
    else:
        dico[x] = 1 # x n'est pas une clé de dico: on la crée avec la valeur 1
    dico[x]=dico.setdefault(x, 0) + 1
    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]

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2021
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2021
    Messages : 7
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Cela signifie que, contrairement à ton premier post "L" ne contient pas la liste telle que mentionnée. Ou alors s'il l'a contenue, à un moment donné il l'a perdue. Probablement que tu as dû écrire quelque part L=traitement(L).

    Accessoirement ta liste initiale ne contient pas des nombres mais des strings. Donc c'est L.append("1") qu'il faut écrire si tu veux rester cohérent.


    dico[x]=dico.setdefault(x, 0) + 1
    Si j'utilise cette ligne de code, je dois ducoup definir plus haut x ?

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par foudrixe Voir le message
    Si j'utilise cette ligne de code, je dois ducoup definir plus haut x ?
    Regarde le code complet d'où j'ai extrait cette partie !!!
    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
    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,

    Citation Envoyé par foudrixe Voir le message
    Si j'utilise cette ligne de code, je dois ducoup definir plus haut x ?
    Ce qui est surtout important, c'est que tu comprennes ce que tu fais!

    Tu as une liste composé d'éléments: L

    Il te faut parcourir tous les éléments de cette liste avec une boucle "for", en appelant chaque élément x par exemple (ou n'importe quoi d'autres).

    Et pour chaque élément (ici x), tu fais ce qu'il faut faire pour mettre chaque élément x comme clé de dico, et tu incrémentes à chaque fois que x est rencontré son compteur (la valeur de dico[x]).

    Regarde ma proposition: elle est plus simple à comprendre. Peut-être qu'après ça, tu pourras passer à la proposition de Sve@r.

    Pour celle-ci, la méthode .setdefaults est dans la doc, et même en français:
    https://docs.python.org/fr/3/library...ict.setdefault

Discussions similaires

  1. Créer une fonction pour ajouter des clés/valeurs dans ma hashmap
    Par khalous91 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/05/2015, 13h40
  2. Comment fait-on pour ajouter une signature à son profil ?
    Par mullger dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 28/04/2006, 16h42
  3. Comment faire pour ajouter une ligne seulement !
    Par Fredri dans le forum Access
    Réponses: 1
    Dernier message: 26/12/2005, 11h44
  4. Réponses: 8
    Dernier message: 02/12/2005, 18h07
  5. Réponses: 12
    Dernier message: 22/02/2005, 17h45

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