Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comparaison de plusieurs listes valeur par valeur

    1 juillet 2013 à 9:47:51

    Bonjour a tous,

    (d'avance pardonnez moi pour les accents, j'ai un clavier Qwerty)

    J'ai fait le tour de pas mal de sujets sur les listes mais je n'ai pas trouve de reponse concernant mon projet.

    En fait j'aimerai comparer plusieurs listes , valeur par valeur 

    et retourner une nouvelle liste contenant le maximum de chaque valeur...

    J'ai deja fait un gros travail de mise en conformite de mes listes pour qu'elles soient de meme taille mais je seche maintenant sur la comparaison..

    J'ai plusieurs pistes mais j'ai du mal a les appliquer en python.

    Si vous avez quelques conseils ou idees, je serai heureux de vous lire.

    Bonne journee a tous !

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      1 juillet 2013 à 10:12:27

      " retourner une nouvelle liste contenant le maximum de chaque valeur..."

      Le plus simple est que tu donnes un exemple, et ce que tu souhaiterais en sortie, histoire qu'on ne réponde pas à côté...

      • Partager sur Facebook
      • Partager sur Twitter
        1 juillet 2013 à 10:38:57

        Pour deux listes, on peut faire comme ça, par exemple
        #liste1 et liste2 sont les listes de départ. liste3 est celle d'arrivée.
        
        for element1 in liste1:
          for element2 in liste2:
            liste3.append(max(element1, element2))


        • Partager sur Facebook
        • Partager sur Twitter
        Ce message est utile ? Pouce.
        Anonyme
          1 juillet 2013 à 10:46:01

          Si Matouche a vu juste, dans ce cas, on peut faire ceci

          >>> liste1 = [12, 5, 7]
          >>> liste2 = [1, 2, 3]
          >>> [max(tup) for tup in zip(liste1, liste2)]
          [12, 5, 7]
          



          • Partager sur Facebook
          • Partager sur Twitter
            1 juillet 2013 à 10:54:09

            Oui, je n'avais pas pensé à utiliser une compréhension de liste, mais c'est encore mieux.
            • Partager sur Facebook
            • Partager sur Twitter
            Ce message est utile ? Pouce.
              1 juillet 2013 à 11:20:23

              Merci a vous,

              je devrais pouvoir m'en sortir avec ca.

              Bonne journee !

              • Partager sur Facebook
              • Partager sur Twitter
                1 juillet 2013 à 11:24:06

                En supposant que les listes en entrées sont elle même regroupées en une liste, il s’agit simplement de faire une transposition et d’appliquer la fonction max a chaque ligne de la transposé. Je propose donc le code suivant.

                list_of_list = [ [1, 3, 4, -3], [2, 1, 0], [5, 2, 1], [3, 3] ]
                print [ max(my_tuple) for my_tuple in map(None,*list_of_list) ]

                C’est intéressant en plus parce que les listes n’ont pas a être de la même longueur, par contre au niveau perf je ne sais pas du tout ce que ça donne, donc si les listes sont un peu longue ce sera certainement très lent.

                -
                Edité par simbilou 1 juillet 2013 à 11:26:44

                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoirbépocode minimal  — Ge0 <3
                Anonyme
                  1 juillet 2013 à 11:28:06

                  @simbilou

                  Il me semble qu'à l'identique on pourrait faire cela

                  >>> list_of_list = [ [1, 3, 4, -3], [2, 1, 0], [5, 2, 1], [3, 3] ]
                  >>> map(max, *list_of_list)
                  [5, 3, 4, -3]
                  



                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 juillet 2013 à 11:37:50

                    @fred1599 Héhé effectivement j’ai fait trop compliqué. >_<

                    -
                    Edité par simbilou 1 juillet 2013 à 11:38:14

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Zeste de Savoirbépocode minimal  — Ge0 <3
                    Anonyme
                      1 juillet 2013 à 22:20:43

                      et dans le cas où les listes ne sont pas de la même longueur, si on ne tient pas compte des éléments "en trop", la solution de fred2599 marche aussi; si on veut aussi prendre en compte ces valeurs, itertools.zip_longuest est intéressant (pour simplifier le "travail de mise en conformité").

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Comparaison de plusieurs listes valeur par valeur

                      × 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