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 :

Listes et dictionnaire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 69
    Par défaut Listes et dictionnaire
    bonjour,

    j'avais un dictionnaire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico={'cle1': ['h','t','h','e','c'], 'cle2': ['e','c','t','c','h'], ...}
    J'ai 120 clés.
    J'ai ensuite regroupé en 3listes les valeurs du dictionnaire, de manière à ce que j'ai pour liste1: 46clés (et leurs valeurs), pour liste2: 28 et pour liste3: 46.
    J'ai donc 3listes de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste1= [['h','t','h','e','c','h','t'],['c','t','c','h','e','c'],['e','c','h','t','h','e'],...]
    Je veux pour chacune des listes, répertorier (dans trois nouvelles listes) le nombre d'occurence de chacun de mes str.
    C'est-à-dire pour toutes les sous-listes de liste1 independamment, je voudrais répertorier le nombre de 'h', de 't', de 'c' et de 'e'.

    Voici mon code (qui ne marche pas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nouvelleliste1=[]
    for k in liste1:
         for x in range(len(k)):
                 x=0
                 if k[x] == 'h':
                        nouvelleliste1.append(k.count(k[x]))
                 x=x+1
     
    print nouvelleliste1


    Il me renvoie un nombre répété plein de fois mais je ne sais pas à quoi ça correspond, et ces nombres ne correspondent meme pas à la longueur de la liste traitée.

  2. #2
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Par défaut
    Salut Victoria007,

    Je ne suis pas certain d'avoir tout bien compris, mais essayons quand même...
    A première vue, il y a une erreur flagrante dans ton code, qui est la valeur de la variable x que tu réinitialises dans ta boucle. La conséquence est que tu ne travailles qu'avec la première valeur de ta liste à chaque tour de boucle.

    Je te propose ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    nouvelleliste1=[]
    for k in liste1:
         met = []
         for x in k:
              if x not in met:
                   met.append(x)
                   nouvelleliste1.append(k.count(x))
     
    print nouvelleliste1
    J'espère que ça pourra t'aider.

    Bon courage,
    Mickaël

    ps : Tn projet semble relever de la biologie structurale. Je me trompe ?

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Je crois comprendre que tu veux une liste de listes de 4 nombres, mais pour pouvoir retrouver à quelle lettre correspond chaque nombre, il faudrait que les 4 nombres apparaissent dans un ordre précis, non ? Par exemple, le nombre de 'h', suivi du nombre de 't', suivi du nombre de 'c' et enfin le nombre de 'e'.
    Je ferais plutôt ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nouvelleliste1=[[k.count(c) for c in 'htce'] for k in liste1]
    Ou si tu n'est pas à l'aise avec les compréhensions de listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nouvelleliste1=[]
    for k in liste1:
        sublist = []
        for c in 'htce':
            sublist.append(k.count(c))
        nouvellelist1.append(sublist)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 69
    Par défaut
    dividee --> Merci beaucoup pour ton code, oui, c'est plus pratique de cette manière, comme ça après si j'en ai besoin, je peux traiter indifferemment 'h', 'e', 't' et 'c' ou globalement en additionnant.
    Par contre, j'ai utilisé ton second code, parce que je ne suis pas encore tout à fait à l'aise avec le premier
    Merci beaucoup!

    mkrzemin --> Merci beaucoup pour ton code, il marche également très bien! Et pour répondre à ta question: oui, tout à fait, c'est de la biologie structurale.
    J'ai vu dans ton profil que tu faisais une thèse de modélisation moléculaire?
    En ce qui me concerne, je suis en 1ère année de Master Biologie-Informatique, et actuellement en stage, porté d'ailleurs sur de la modélisation moléculaire.

Discussions similaires

  1. une liste de dictionnaires
    Par chettane dans le forum Général Python
    Réponses: 8
    Dernier message: 08/09/2012, 23h31
  2. liste, Tuple, dictionnaire, ou ?
    Par Pascalist dans le forum Général Python
    Réponses: 25
    Dernier message: 11/12/2011, 11h00
  3. opérations sur listes et dictionnaires
    Par rom44 dans le forum Général Python
    Réponses: 20
    Dernier message: 14/10/2010, 00h49
  4. Mise a jour liste de dictionnaire
    Par Invité(e) dans le forum Général Python
    Réponses: 6
    Dernier message: 19/10/2009, 16h07
  5. Dictionnaire de liste -> liste de dictionnaire
    Par ju_bicycle dans le forum Général Python
    Réponses: 8
    Dernier message: 01/07/2009, 12h43

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