Partage
  • Partager sur Facebook
  • Partager sur Twitter

Permutation entre deux listes

Sujet résolu
    15 février 2016 à 11:43:56

    Bonjour,

    Je cherche une manière élégante de faire passer un élément d'une liste à une autre :

    [[1,2,3],[4,5,6]]  --> [[1,2],[3,4,5,6]] ou --> [[1,2,3,4],[5,6]]

    Bien sûr, je peux faire une copie de l'élément, puis l'effacer de sa liste initiale, mais je me demandais si il n'existait pas une fonction déjà existante et plus complète sur ce type d'opération. Itertool ne semble pas le faire, et je ne crois pas que numpy le fasse. Alors si vous avez un tuyau sur le sujet, je suis preneur!

    Lelorrain

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 février 2016 à 12:06:08

      Il faut jouer avec les méthodes des listes, pop, insert et append.

      lst1, lst2 = [1, 2, 3], [4, 5, 6]
      
      # lst1[-1] -> lst2[0]
      lst2.insert(0, lst1.pop())
      
      # lst1[-1] <- lst2[0]
      lst1.append(lst2.pop(0))
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        15 février 2016 à 12:13:45

        Je cherche une manière élégante de faire passer un élément d'une liste à une autre

        La seule manière élégante est de créer une fonction, ou une méthode de classe héritant de l'objet list.

        Après par rapport à la réponse de celthon, est-ce que c'est forcément le dernier élément de liste1 qui se retrouve au début de la liste2 ?

        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2016 à 12:18:27

          Tu peux essayer un truc comme ça:

          L = [[1,2,3], [4,5,6]]
          >>> L[1].append(L[0].pop(2))
          >>> L
          [[1, 2], [4, 5, 6, 3]]


          Edit: ah mince je me suis fait grillé xD

          -
          Edité par Derzal 15 février 2016 à 12:19:10

          • Partager sur Facebook
          • Partager sur Twitter
            15 février 2016 à 13:28:28

            Ok, merci à vous !  c'est vrai que écrit en condensé comme ça, c'est assez compact.

            Merci pour les tuyaux !

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              15 février 2016 à 13:51:06

              Voici un exemple avec l'héritage

              class MyList(list):
                  
                  def addLastElement(self, anotherList):
                      if self: # Control if empty list
                          anotherList.insert(0, self.pop())
              
              l1 = MyList([1, 2, 3])
              l2 = [4, 5, 6]
              l1.addLastElement(l2) # compact ?
              
              print(l1) # [1, 2]
              print(l2) # [3, 4, 5, 6]


              -
              Edité par Anonyme 15 février 2016 à 13:52:42

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                15 février 2016 à 14:39:06

                Pour info:

                Je ne sais pas ce que tu cherches à faire exactement en déplaçant des éléments de liste en liste, mais peut-être que le type list n'est pas le plus pertinent ? Si je te parle du type deque est-ce que ça te semble plus cohérent avec ce que tu cherches à faire en amont ? Si oui, utilise-le car il sera nettement plus performant !

                • Partager sur Facebook
                • Partager sur Twitter
                  15 février 2016 à 18:24:04

                  Merci pour l'info, je ne connaissais pas ce type d'objet.

                  Dans mon cas, la liste devrait suffire. C'est une liste de groupes de joueurs. Et parfois j'ai besoin de faire passer un joueur d'un côté ou d'un autre. Donc comme tu l'as proposé plus haut, ça marche très bien.

                  Merci aussi pour ce nouvel objet !

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Permutation entre deux 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