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 :

Occurences d'une liste


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 Occurences d'une liste
    Bonjour,

    J'ai une liste de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = [['1.0088435', '34'], ['2.6547609', '2'], ['0.4427932', '12'], ['1.2568954', '101'], ['0.1235689', '34']]
    Je voudrais obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [['2','34'],['1','2'],['1','12'],['1','101']]
    C'est à dire compter le nombre de fois que j'ai l'élément en indice 1 dans liste, ou compter le nombre d'éléments en indice 0 qui ont le meme indice 1.

    J'utilise ce code mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    liste2=[]
    exist=0
    for i in range(len(liste)):
         for j in liste2:
                 if (liste[i][1])==j:
                         exist=1
                         break
         if exist==0:
                 liste2.append([liste[i][1],liste.count(liste[i][0])])
         exist=0
    Auriez vous une proposition?

  2. #2
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Je propose d'utiliser un dictionnaire, y a t il vraiment besoin d'avoir la deuxième liste ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    liste = [['1.0088435', '34'], ['2.6547609', '2'], ['0.4427932', '12'], ['1.2568954', '101'], ['0.1235689', '34']]
     
    occur={}
    for l in liste :
        if l[1] not in occur.keys():occur[l[1]]=0
        occur[l[1]]+=1
    print occur
     
    # Si il y a vraiment besoin d'une deuxieme liste
    newliste=[]
    for cle in occur :
        newliste.append([occur[cle],cle])
    print newliste

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

    Solution proposée:

    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    liste = [['1.0088435', '34'], ['2.6547609', '2'], ['0.4427932', '12'], ['1.2568954', '101'], ['0.1235689', '34']]
     
    liste2=[]
     
    for i,j in liste:
        existe=False
        for k in range(0,len(liste2)):
            if j==liste2[k][1]:
                liste2[k][0]+=1
                existe=True
        if not existe:
            liste2.append([1,j])
     
    print liste2
     
    [[2, '34'], [1, '2'], [1, '12'], [1, '101']]
    Tyrtamos

  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
    Merci beaucoup pour vos réponses

    En effet, les résultats dans une nouvelle liste sont plus simples à exploiter par la suite.

    Merci beaucoup.

  5. #5
    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
    Du coup, en fait, à partir de 3listes du même style que j'ai obtenu ci - dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste1=[[459, '24'], [369, '25'], [839, '26'], [451, '27'], [191, '20'], [207, '21'], [392, '22'], [621, '23'], [212, '28'], [126, '29'], [46, '0'], [36, '4'], [287, '8'], [198, '59'], [152, '58'], [136, '55'], [58, '54'], [147, '57'], [154, '56'], [103, '51'], [63, '50'], [64, '53'], [40, '52'], [131, '115'], [77, '114'], [111, '117']]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste2=[[274, '24'], [168, '25'], [547, '26'], [296, '27'], [187, '20'], [70, '21'], [214, '22'], [378, '23'], [306, '28'], [363, '29'], [93, '0'], [86, '4'], [85, '8'], [67, '59'], [77, '58'], [81, '55'], [53, '54'], [103, '57'], [129, '56'], [84, '51'], [45, '50'], [79, '53'], [70, '52'], [78, '115'], [34, '114']]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste3=[[63, '24'], [28, '25'], [108, '26'], [92, '27'], [63, '20'], [21, '21'], [40, '22'], [78, '23'], [109, '28'], [265, '29'], [65, '0'], [69, '4'], [35, '8'], [23, '59'], [35, '58'], [43, '55'], [36, '54'], [63, '57'], [72, '56'], [43, '51'], [38, '50'], [57, '53'], [64, '52'], [50, '115'], [26, '114']]
    J'ai créé un dictionnaire qui regroupe les valeurs des trois listes précédentes pour les memes valeurs entre ' ':
    dico={'24': 796, '25': 565, '26': 1494, '27': 839, '20': 441, '21': 298, '22': 646, '23': 1077, '28': 627, '29': 754, '0': 204, '4': 191, '8': 407, '59': 288, '58': 264, '55': 260, '54': 147, '57': 313, '56': 355, '51': 230, '50': 146, '53': 200, '52': 174, '115': 259, '114': 137}

    Et je dois maintenant, pour chaque clé du dico (qui sont également dans les 3listes) :
    diviser la valeur qui est dans la liste 1 avec le total (pour la meme cle) dans le dico.
    et de même pour la liste 2, et la liste 3.

    Par exemple à la main ça donnerait :
    pour l'indice '24' :
    - pour la liste1: 459/796
    - pour la liste2: 274/796
    - pour la liste3: 63/796
    Et je veux stocker dans une nouvelle liste le résultat des divisions de chaque clé.
    (C'est-à-dire, il me faut 3nouvelles listes (correspondant aux valeurs des listes 1,2et3) avec les divisions de chaque clé).

    Et je ne vois pas comment faire.


    EDIT :
    J'ai testé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    liste = []
    for cle in dico.keys():
    	for i in range(len(liste1)):
    		for j in range(len(listedico)):
    			if liste1[i][1] == listedico[j][1] :
    				liste.append([cle,(float(liste1[i][0])/float(listedicoo[j][0]))])
    (Ou listedico est seulement dico mis sous forme de liste du même style que liste1/liste2/liste3)

    Mais il me répète les clés plein de fois... ce n'est donc pas la bonne méthode

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

    Code proposé:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from __future__ import division
     
    liste1=[[459, '24'], [369, '25'], [839, '26'], [451, '27'], [191, '20'], [207, '21'], [392, '22'], [621, '23'], [212, '28'], [126, '29'], [46, '0'], [36, '4'], [287, '8'], [198, '59'], [152, '58'], [136, '55'], [58, '54'], [147, '57'], [154, '56'], [103, '51'], [63, '50'], [64, '53'], [40, '52'], [131, '115'], [77, '114'], [111, '117']]
    liste2=[[274, '24'], [168, '25'], [547, '26'], [296, '27'], [187, '20'], [70, '21'], [214, '22'], [378, '23'], [306, '28'], [363, '29'], [93, '0'], [86, '4'], [85, '8'], [67, '59'], [77, '58'], [81, '55'], [53, '54'], [103, '57'], [129, '56'], [84, '51'], [45, '50'], [79, '53'], [70, '52'], [78, '115'], [34, '114']]
    liste3=[[63, '24'], [28, '25'], [108, '26'], [92, '27'], [63, '20'], [21, '21'], [40, '22'], [78, '23'], [109, '28'], [265, '29'], [65, '0'], [69, '4'], [35, '8'], [23, '59'], [35, '58'], [43, '55'], [36, '54'], [63, '57'], [72, '56'], [43, '51'], [38, '50'], [57, '53'], [64, '52'], [50, '115'], [26, '114']]
    dico={'24': 796, '25': 565, '26': 1494, '27': 839, '20': 441, '21': 298, '22': 646, '23': 1077, '28': 627, '29': 754, '0': 204, '4': 191, '8': 407, '59': 288, '58': 264, '55': 260, '54': 147, '57': 313, '56': 355, '51': 230, '50': 146, '53': 200, '52': 174, '115': 259, '114': 137}
     
    ratios1 = []
    for cle in dico.keys():
        for i,j in liste1:
            if j==cle:
                ratios1.append([cle,i/dico[cle]])
                break
     
    ratios2 = []
    for cle in dico.keys():
        for i,j in liste2:
            if j==cle:
                ratios2.append([cle,i/dico[cle]])
                break
     
    ratios3 = []
    for cle in dico.keys():
        for i,j in liste3:
            if j==cle:
                ratios3.append([cle,i/dico[cle]])
                break
    Ce qui donne les 3 listes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ratios1=[['115', 0.50579150579150578], ['114', 0.56204379562043794], ['24', 0.5766331658291457], ['25', 0.65309734513274331], ['26', 0.56157965194109771], ['27', 0.53754469606674615], ['20', 0.43310657596371882], ['21', 0.69463087248322153], ['22', 0.60681114551083593], ['23', 0.57660167130919215], ['28', 0.33811802232854865], ['29', 0.16710875331564987], ['0', 0.22549019607843138], ['4', 0.18848167539267016], ['8', 0.70515970515970516], ['59', 0.6875], ['58', 0.5757575757575758], ['55', 0.52307692307692311], ['54', 0.39455782312925169], ['57', 0.46964856230031948], ['56', 0.43380281690140843], ['51', 0.44782608695652176], ['50', 0.4315068493150685], ['53', 0.32000000000000001], ['52', 0.22988505747126436]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ratios2=[['115', 0.30115830115830117], ['114', 0.24817518248175183], ['24', 0.34422110552763818], ['25', 0.29734513274336283], ['26', 0.36613119143239625], ['27', 0.35280095351609059], ['20', 0.42403628117913833], ['21', 0.2348993288590604], ['22', 0.33126934984520123], ['23', 0.35097493036211697], ['28', 0.48803827751196172], ['29', 0.48143236074270557], ['0', 0.45588235294117646], ['4', 0.45026178010471202], ['8', 0.20884520884520885], ['59', 0.2326388888888889], ['58', 0.29166666666666669], ['55', 0.31153846153846154], ['54', 0.36054421768707484], ['57', 0.32907348242811502], ['56', 0.36338028169014086], ['51', 0.36521739130434783], ['50', 0.30821917808219179], ['53', 0.39500000000000002], ['52', 0.40229885057471265]]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ratios3=[['115', 0.19305019305019305], ['114', 0.18978102189781021], ['24', 0.079145728643216076], ['25', 0.049557522123893805], ['26', 0.072289156626506021], ['27', 0.10965435041716329], ['20', 0.14285714285714285], ['21', 0.070469798657718116], ['22', 0.061919504643962849], ['23', 0.072423398328690811], ['28', 0.17384370015948963], ['29', 0.35145888594164454], ['0', 0.31862745098039214], ['4', 0.36125654450261779], ['8', 0.085995085995085999], ['59', 0.079861111111111105], ['58', 0.13257575757575757], ['55', 0.16538461538461538], ['54', 0.24489795918367346], ['57', 0.2012779552715655], ['56', 0.20281690140845071], ['51', 0.18695652173913044], ['50', 0.26027397260273971], ['53', 0.28499999999999998], ['52', 0.36781609195402298]]
    Tyrtamos

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

Discussions similaires

  1. Supprimer toutes les occurences d'une liste
    Par honrisse dans le forum Prolog
    Réponses: 2
    Dernier message: 16/12/2009, 21h59
  2. soustraire chaque occurance d'une liste d'une seconde liste
    Par sloshy dans le forum Général Python
    Réponses: 5
    Dernier message: 14/09/2009, 21h57
  3. Nombre d'occurence dans une liste
    Par Axiome dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/10/2008, 13h15
  4. Lister l'ensemble des occurences d'une liste
    Par djulz dans le forum Excel
    Réponses: 6
    Dernier message: 21/04/2008, 17h14
  5. algorithme pour enlever les occurences d'une liste
    Par bendenice dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2006, 23h28

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