Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de liste

    9 octobre 2012 à 10:17:34

    Bonjour,
    je voudrais savoir quel serait le moyen le plus efficace sachant que j'ai peu de memoire et au contraire un tres grand fichier , si le premier occurence $1 est identique au deuxieme $ 1 et ainsi de suite et d'additioner si c'est egal les $2 ensemble.

    Exemple 676+114+103=665

    J'avais penser a utilisé un dictionnaire mais je perds de la memoire et je crache mon ordi.

    Une idee merci

    fgenesh_gene00001 676
    fgenesh_gene00001 114
    fgenesh_gene00001 103
    fgenesh_gene00002 2751
    fgenesh_gene00002 129
    fgenesh_gene00002 58
    fgenesh_gene00002 149
    fgenesh_gene00002 182
    fgenesh_gene00002 170
    fgenesh_gene00002 50
    en entrée de verifier
    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2012 à 10:46:20

      Bonjour, tu peux toujours utiliser des listes pour récupérer chaque valeur dans ton fichier.
      Ta liste contiendra donc:
      liste = [676, 114, 103, ....]
      


      Si tu veux connaître la somme de toute ta liste utilise la fonction sum
      resultat = sum(liste)
      


      Si tu souhaites additionner trois membres et obtenir le résultat tu peux toujours essayer avec une solution naive comme:

      Pour chaque element:
      ---Ajouter dans une seconde liste l'élément en cours
      ---Si la liste contient 3 éléments, tu fait la somme de cette liste et tu stock le résultat
      ------Mettre la liste à vide
      Ect
      Retourne une autre liste ayant pour membres le résultat de chaque somme.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        9 octobre 2012 à 11:01:36

        Citation

        676+114+103=665



        o_O

        Citation

        je voudrais savoir quel serait le moyen le plus efficace sachant que j'ai peu de memoire et au contraire un tres grand fichier



        Qu'appelez vous grand fichier?
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2012 à 11:17:32

          Tu pourrais nous montrer le code que tu as déjà ?

          Si tu n'as pas des tonnes d'id différents, un dictionnaire est effectivement la meilleure façon de s'y prendre, mais le fait que tu aies une fuite de mémoire me semble très louche. Est-ce que tu lis tout ton fichier d'un coup, ou bien est-ce que tu le charges ligne par ligne ?

          sum = {}
          with open('monfichier.txt', 'r') as fh:
              for line in fh:
                  key, val = line.split(' ')
                  sum[key] = int(val) + sum.get(key, 0)
          
          • Partager sur Facebook
          • Partager sur Twitter
          Zeste de Savoir, le site qui en a dans le citron !
            9 octobre 2012 à 11:20:37

            La j'ai pas acces a mon ordi, mais je pensais faire un dictionnaire, car le but c'est d'additionné les nombres ayant l'identifiant identique.

            Donc parcourir un fichier de plus de 1 GO je ne sais pas comment faire...

            J'avais penser a faire for line1 in file1.readlines():

            ensuite un split???
            • Partager sur Facebook
            • Partager sur Twitter
              9 octobre 2012 à 11:23:26

              Citation : k.mamoud


              J'avais penser a faire for line1 in file1.readlines():



              Surtout pas ! Cette fonction va charger tout le fichier en RAM. Je t'ai montré un exemple dans mon edit.
              • Partager sur Facebook
              • Partager sur Twitter
              Zeste de Savoir, le site qui en a dans le citron !
                9 octobre 2012 à 11:29:12

                Ok
                je vais verfier dès que je peux merci
                • Partager sur Facebook
                • Partager sur Twitter

                Probleme de liste

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown