Partage
  • Partager sur Facebook
  • Partager sur Twitter

Découper une liste en trois sous listes

Sujet résolu
    4 décembre 2015 à 0:03:37

    Bonsoir,

    Comme dit dans le titre, j'aimerai découper une liste de 12 chiffres en 3 sous listes de 4 chiffres mais je ne vois vraiment pas comment faire.

    En cherchant, j'ai trouvé la méthode split mais elle prend en paramètre une chaîne de caractères.

    Est-ce qu'il existe une méthode similaire pour les listes ou non ?

    Merci pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2015 à 0:56:16

      Bonsoir NicolaZ

      Tapes le code suivant :

      a=[123,345,323,876,345,345,67,43,89,98,11,12]#par exemple
      a1=a[0:4]
      a2=a[4:8]
      a3=a[8:12]# on pourrait remplacer les chiffres par des variables. ex a1=a[a:c+1]
      print(a)
      print(a1)
      print(a2)
      print(a3)

      Exécute le :

      >>> ================================ RESTART ================================
      >>>
      [123, 345, 323, 876, 345, 345, 67, 43, 89, 98, 11, 12]
      [123, 345, 323, 876]
      [345, 345, 67, 43]
      [89, 98, 11, 12]

      On appelle cela du slicing. Je te laisse jouer avec des boucles et des indices pour adapter ce principe à ton programme.

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2015 à 6:13:09

        Tu peux convertir ta liste en une chaîne

        Utiliser split pour avoir 3 sous chaînes

        Puis convertir tes sous chaînes en liste 

        • Partager sur Facebook
        • Partager sur Twitter
        http://sinclair.recreatedzxspectrum.com/index.php
          4 décembre 2015 à 10:52:02

          @Dark: Ta méthode est beaucoup trop complexe. La conversion d'une liste en chaîne est "totale", c'est-à-dire que tous les éléments de la liste sont représentés (les crochets, les espaces, les éléments). Bref, bonne chance pour découper proprement cette chaîne avec split :lol:.

          Non, le plus simple est effectivement d'utiliser le slicing comme l'as proposé Jean-Claude ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Précepte: Le mieux est l'ennemi du bien
            4 décembre 2015 à 22:44:20

            Merci beaucoup pour vos réponses, je me suis un peu renseigné sur split et je trouvais ça laborieux de convertir pour avoir mes sous chaines et convertir à nouveau. Je vais plutôt tenter ma chance avec le slicing. 

            Je n'ai pas eu le temps d'essayer ça ce soir, je teste ça demain et je reviens vers vous si j'ai de nouveaux problèmes.

            Encore merci et bonne soirée.

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              4 décembre 2015 à 23:01:32

              liste = [123, 345, 323, 876, 345, 345, 67, 43, 89, 98, 11, 12]
              print(list(zip(*[iter(liste)]*3)))
              :waw:
              • Partager sur Facebook
              • Partager sur Twitter
                4 décembre 2015 à 23:08:37

                Je pense pas que le code que tu donnes @oldProgrammer , lui rende service. Il est pas facile a comprendre pour un débutant (et j'imagine que vu ça question c'est un débutant) et utiliser une formule toute faite sans la comprendre c'est la pire des choses a faire de mon point de vue ^^

                A la limite si tu explique ce que fait ton code sa peut être un minimum pédagogique :p

                • Partager sur Facebook
                • Partager sur Twitter
                Touche a tout, nul en tout
                Anonyme
                  4 décembre 2015 à 23:10:14

                  gg oldPro ! Magnifique !

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 décembre 2015 à 23:28:33

                    @Kaygu,

                    Ce code n'est pas conseillé, quoi que je pense extrêmement rapide car on travaille avec les itérateurs, cependant difficile de faire beaucoup mieux que le slicing en règle générale, faudrait mesurer sur de grandes tailles et de nombreuses listes.

                    Je te laisse tout de même lire la documentation sur zip où cette ligne en fait partie.

                    -
                    Edité par Anonyme 4 décembre 2015 à 23:30:20

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 décembre 2015 à 16:30:46

                      Bonjour,

                      J'ai testé le code de @oldProgrammer et ce n'est pas vraiment ce que je veux.

                      l=[1,2,3,4,5,6,7,9,10]
                      print(list(zip(*[iter(l)]*3)))

                      En l'appliquant j'obtiens :

                      [(1, 2, 3), (4, 5, 6), (7, 9, 10)]

                      Alors que je cherche à obtenir : 

                      [[1, 2, 3], [4, 5, 6], [7, 9, 10]]

                      Le slicing semble être la méthode la plus appropriée pour mon utilisation. 

                      Merci encore !

                      EDIT : oui je suis bien un débutant @Kaygu et j'ai encore un peu de mal à assimiler les notions de bases



                      -
                      Edité par NicolaZ 5 décembre 2015 à 16:31:47

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        5 décembre 2015 à 17:50:35

                        En fait la différence va surtout être dans "qu'est-ce que tu comptes faire de ces entiers ?", et comme ce n'est pas spécifié dans ton topic...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 décembre 2015 à 15:20:37

                          Je compte les manipuler, donc le slicing correspond à mes attentes.

                          Merci pour toutes vos réponses, je passe le sujet en résolu.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Découper une liste en trois sous listes

                          × 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