Partage
  • Partager sur Facebook
  • Partager sur Twitter

Reduire une liste

    27 décembre 2016 à 10:59:38

    Bonjour ! 

    Je viens faire appel a vous pour un petit problème que je n'arrive pas a résoudre, étant débutante en python

    A partir d'une liste donnée, je dois réduire celle ci, en affichant une sous liste contenant le chiffre suivi du nombre de fois consécutif où celui-ci apparait

    par exemple [1, 2, 2, 2, 1, 1, 3, 3, 3, 1, 1]

    doit renvoyer [[1, 1], [2, 3], [1, 2], [3, 3], [1, 2]]

    pour ceci j'ai fait ce programme :

    def reducListe(L): 

       c=0

       f=0

       L3=[]

         while L !=[]:

                 if f in L:

                        c+=1

                        L.remove(f)

                 else:

                        if c!=0 :

                        L2=[]

                        L2.append(f)

                        L2.append(c)

                        L3.append(L2)

                        c=0

                        f+=1

          while L==[]:

                  if c!=0 :

                     L2=[]

                     L2.append(f)

                     L2.append(c)

                     L3.append(L2)

                     break

    return L3

    malheureusement ce programme ne me donne que le nombre d’occurrence total du nombre dans la liste, et je ne vois pas comment faire apparaître ceux-ci de manière consécutive

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      27 décembre 2016 à 16:54:14

      Pour faire plus simple.

      Dans un 1er temps crée une seconde liste avec les valeurs de ta premier mais sans doublon.

      Après avec cette liste faire une boucle et pour chaque valeur tu peux utiliser la method count sur ta 1er liste.

      list1 = [1, 2, 2, 2, 1, 1, 3, 3, 3, 1, 1]
      list2 = list1
      
      ... DELETE LIST2 DUPLICATES
      
      for val in list2:
          list1.count(val)
      
      



      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2016 à 7:50:19

        Bonjour,

        Jo541 ta technique permet d'obtenir le nombre d'occurences pour chaque valeur présente dans la liste mais ce n'est pas ce que Zeechan souhaite faire.

        Pour ma part j'ai fait un code mais il y a sûrement plus simple :

        t=[1, 2, 2, 2, 1, 1, 3, 3, 3, 1, 1]
        nbreOccur=[]
        nbres=[]
        
        def multiplier(t1,t2):
            produit=0
            for k in range(0,len(t1)):
                produit+=t1[k]*t2[k]
            return produit
        
        def enleverDoublons(t):
            increment=0
            debut=t[0]
            
            for chif in t:        
                if chif!=debut :
                    nbreOccur.append(increment)
                    nbres.append(debut)
                    increment=0
                    debut=chif
                increment+=1
                
            nbreManquant=(sum(t)-multiplier(nbreOccur,nbres))/t[len(t)-1]
            nbreOccur.append(int(nbreManquant))
            nbres.append(t[len(t)-1])
            finalList = [([0] * 2) for i in range(len(nbres))]
        
            for k in range(0,len(nbres)):
                finalList[k]=[nbres[k],nbreOccur[k]]
                
            return finalList
        
        
        print(enleverDoublons(t))
        



        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          28 décembre 2016 à 9:02:22

          groupby est pratique pour ce genre de chose, il permet de regrouper les éléments en fonction d'une fonction clé.

          >>> from itertools import groupby
          >>> my_list = [1, 2, 2, 2, 1, 1, 3, 3, 3, 1, 1]
          >>> group = [(k, sum(1 for i in g)) for k, g in groupby(my_list)]
          >>> group
          [(1, 1), (2, 3), (1, 2), (3, 3), (1, 2)]
          


          Fonctionnement de groupby

          >>> for k, g in groupby(my_list):
          ...     print(k, g)
          ... 
          1 <itertools._grouper object at 0x7fe82947a4e0>
          2 <itertools._grouper object at 0x7fe82947ac18>
          1 <itertools._grouper object at 0x7fe82947a4e0>
          3 <itertools._grouper object at 0x7fe82947ac18>
          1 <itertools._grouper object at 0x7fe82947a4e0>
          >>> 
          >>> for k, g in groupby(my_list):
          ...     for i in g:
          ...         print(k, i)
          ... 
          1 1
          2 2
          2 2
          2 2
          1 1
          1 1
          
          >>> for k, g in groupby(my_list):
          ...     print(k, list(g))
          ... 
          1 [1]
          2 [2, 2, 2]
          1 [1, 1]
          3 [3, 3, 3]
          1 [1, 1]
          

          Merci mon interpréteur python

          Utilisation de groupby -> voir ce site



          -
          Edité par Anonyme 28 décembre 2016 à 9:08:02

          • Partager sur Facebook
          • Partager sur Twitter
            29 décembre 2016 à 14:01:36

            Merci beaucoup pour vos réponses, mon programme fonctionne :D
            • Partager sur Facebook
            • Partager sur Twitter
              3 janvier 2017 à 9:52:48

              Leyme, Oui je n'avais pas super bien compris la question ^^.

              • Partager sur Facebook
              • Partager sur Twitter

              Reduire une 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