Partage
  • Partager sur Facebook
  • Partager sur Twitter

(in)compréhensions de liste

    3 octobre 2010 à 12:13:28

    Bonjour à tous, comme beaucoup ici, je débute sur Python.
    Toutefois, j'ai l'habitude de programmer en C.
    J'aimerais comprendre davantage les compréhensions de liste ;)

    Voilà, j'ai des listes et des tuples imbriqués :
    [(["Salut.", "Mon nom est Irken.","Je suis né un 20 septembre."], "Irken", "22/01/1789", 2), (["Mes rhododendrons sont jeunes.", "Pas comme toi, Irken."], "Robert", "16/03/1932", 4)]

    J'aimerais concaténer les listes pour obtenir :
    [(["Salut. Mon nom est Irken. Je suis né un 20 septembre."], "Irken", "22/01/1789", 2), (["Mes rhododendrons sont jeunes. Pas comme toi, Irken."], "Robert", "16/03/1932", 4)].

    J'ai créé le code suivant, que je n'ai pas eu beaucoup de mal à faire, puisque ça ressemble au C
    final=list()
    for (phr,a,d,s) in tokens:
        recompose=list()
        for bout in phr:
            recompose+=bout
        phr=recompose
        final.append((phr,a,d,s))
    

    Mais par contre, en utilisant les compréhensions de liste, je n'y arrive vraiment pas. Qui peut m'aider?
    Ah, oui, et le programme s'exécutera-t-il plus rapidement?
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      3 octobre 2010 à 12:25:23

      Avec un truc comme ça :
      a = [[["Salut.", "Mon nom est Irken.","Je suis né un 20 septembre."], "Irken", "22/01/1789", 2], [["Mes rhododendrons sont jeunes.", "Pas comme toi, Irken."], "Robert", "16/03/1932", 4]]
      for i in a:
          a[a.index(i)][0] = ' '.join(i[0])
      
      print a
      [['Salut. Mon nom est Irken. Je suis né un 20 septembre.', 'Irken', '22/01/1789', 2], ['Mes rhododendrons sont jeunes. Pas comme toi, Irken.', 'Robert', '16/03/1932', 4]]
      

      J'ai changé le tuple pour une liste vu qu'il faut modifier son contenu.
      D'ailleurs, si quelqu'un a une idée pour améliorer a[a.index(i)], je suis preneur.
      • Partager sur Facebook
      • Partager sur Twitter
        3 octobre 2010 à 15:20:05

        Tu peux utiliser enumerate(a)
        • Partager sur Facebook
        • Partager sur Twitter
          3 octobre 2010 à 16:36:00

          bonjour

          Citation : MathX

          D'ailleurs, si quelqu'un a une idée pour améliorer a[a.index(i)], je suis preneur.



          Tout simplement:

          a = [[["Salut.", "Mon nom est Irken.","Je suis né un 20 septembre."], "Irken", "22/01/1789", 2], [["Mes rhododendrons sont jeunes.", "Pas comme toi, Irken."], "Robert", "16/03/1932", 4]]
          
          for i in a:
              i[0] = ' '.join(i[0])
          
          print a
          


          Ensuite j'ai le pressentiment que la liste en question est une réponse sql (je me trompe peut-être), du coup Irken n'a pas le choix du tuple.
          C'est là que les liste compréhensions peuvent être utile:
          Pour transformer les tuples en list:

          a = [(["Salut.", "Mon nom est Irken.","Je suis né un 20 septembre."], "Irken", "22/01/1789", 2), (["Mes rhododendrons sont jeunes.", "Pas comme toi, Irken."], "Robert", "16/03/1932", 4)]
          
          aList = [list(b) for b in a]
          for i in aList:
              i[0] = ' '.join(i[0])
          
          print aList
          



          Ou directement:
          b = [(" ".join(phrase), nom, date, id) for phrase, nom, date, id in a]
          print b
          


          ou encore (si la taille de la liste n'est pas connu):
          b = [[" ".join(c[0])] + list(c[1:]) for c in a]
          print b
          
          • Partager sur Facebook
          • Partager sur Twitter
            3 octobre 2010 à 17:42:21

            Merci pour tous ces conseils;
            par contre je ne comprends pas bien cette ligne : o_O
            b = [[" ".join(c[0])] + list(c[1:]) for c in a]
            

            • Partager sur Facebook
            • Partager sur Twitter
              4 octobre 2010 à 16:50:25

              Citation : Irken

              Merci pour tous ces conseils;
              par contre je ne comprends pas bien cette ligne : o_O

              b = [[" ".join(c[0])] + list(c[1:]) for c in a]
              



              ça revient à faire:
              b = []
              for c in a:
                  b.append([" ".join(c[0])] + list(c[1:]))
              
              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

              (in)compréhensions 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