• # .sort()

    Posté par  . Évalué à 1.

    les types listes ont deux méthodes natives de tri sort et reverse

    a = ['b' , 'c' , 'a']
    a.sort()
    => a = ['a' , 'b' , 'c']
    a.reverse()
    => a = ['c' , 'b' , 'a']
    • [^] # Re: .sort()

      Posté par  (site web personnel) . Évalué à 1.

      Ca, je connais, c'est l'équivalent du sort en PHP.
      Mais si tu veux faire du tri multicolonne, ça ne convient plus.
      • [^] # Re: .sort()

        Posté par  . Évalué à 2.

        je ne sais pas ce que tu cherchers à trier mais il me semble pourtant que cela fonctionne sur un tableau numérique 4x5:

        >>> a = [ range (1,5) , range(15,20) , range(10,15) , range(5,10) ]
        >>> for l in a: print l
        [1, 2, 3, 4]
        [15, 16, 17, 18, 19]
        [10, 11, 12, 13, 14]
        [5, 6, 7, 8, 9]
        >>> a.sort()
        >>> for l in a: print l
        [1, 2, 3, 4]
        [5, 6, 7, 8, 9]
        [10, 11, 12, 13, 14]
        [15, 16, 17, 18, 19]
        >>> a.reverse()
        >>> for l in a: print l
        [15, 16, 17, 18, 19]
        [10, 11, 12, 13, 14]
        [5, 6, 7, 8, 9]
        [1, 2, 3, 4]
        >>> a[0].reverse()
        >>> for l in a: print l
        [19, 18, 17, 16, 15]
        [10, 11, 12, 13, 14]
        [5, 6, 7, 8, 9]
        [1, 2, 3, 4]
        >>> a.sort()
        >>> for l in a: print l
        [1, 2, 3, 4]
        [5, 6, 7, 8, 9]
        [10, 11, 12, 13, 14]
        [19, 18, 17, 16, 15]
        >>>
    • [^] # Re: .sort()

      Posté par  . Évalué à 3.

      également en python 2.4

      sorted(a) => copie triée de a
      reversed(a) => copie renversée de a

      RTFM pour les subtilités (critères de tris, DSU, etc)
  • # Précise

    Posté par  (site web personnel) . Évalué à 1.

    Je précise ma demande.

    J'ai un vecteur de noms.
    J'ai un vecteur de prénoms.

    Je veux avoir une liste de noms et prénoms triés d'abord sur le nom, puis sur le prénom.

    En PHP, c'est facile. En Python, je ne connais pas de fonction qui le fasse. Cela existe-t-il ?

    Donc, si j'ai :

    DUPOND ; Pierre
    HENRI ; Charles
    DUPONT ; Jacques

    Je veux obtenir :

    DUPOND ; Pierre
    DUPONT ; Jacques
    HENRI ; Charles
    • [^] # Re: Précise

      Posté par  . Évalué à 2.

      Essaie quelque chose comme ça:


      # Données à trier
      class Personne:
      def __init__(self,nom,prenom):
      (self.nom,self.prenom)=(nom,prenom)

      personnes = []
      personnes.append(Personne('Viseur','Robert'))
      personnes.append(Personne('Viseur','Nathalie'))
      personnes.append(Personne('Ruesiv','Nathalie'))
      personnes.append(Personne('Ruesiv','Jean-Jacques'))

      # Regroupement par nom
      noms = {}
      for personne in personnes:
      if personne.nom in noms:
      noms[personne.nom].append(personne.prenom)
      else:
      noms[personne.nom] = [personne.prenom]

      # Tri & affichage
      for nom in sorted(noms):
      for prenom in sorted(noms[nom]):
      print "%s %s\n"%(nom,prenom)
    • [^] # Raah, le boulet

      Posté par  . Évalué à 2.

      Il y a plus simple & idiomatique : utiliser la méthode standard __cmp__
      Ce qui donne:


      # Données à trier
      class Personne:
      def __init__(self,nom,prenom):
      (self.nom,self.prenom)=(nom,prenom)
      def __cmp__(self,o):
      return cmp(self.nom+self.prenom,o.nom+o.prenom)
      def __str__(self):
      return "%s ; %s"%(self.nom,self.prenom)

      personnes = []
      personnes.append(Personne('Viseur','Robert'))
      personnes.append(Personne('Viseur','Nathalie'))
      personnes.append(Personne('Ruesiv','Nathalie'))
      personnes.append(Personne('Ruesiv','Jean-Jacques'))

      # Affichage
      for personne in sorted(personnes):
      print personne

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.