Sites


Initiation à python

Trier des listes

Il est parfois important de changer l'ordre des éléments. Cela peut être pratique pour des classements ou mettre en relation deux séquences. sort() va faire ce travail très simplement :

liste1 = [5,10,3,7]
liste1.sort()
liste1

> [3, 5, 7, 10]

Cela marche aussi avec les éléments textuels de la liste :

liste1 = ["Descartes","Erasme","Montaigne","Montesquieu","Diderot","Rousseau","Voltaire"]
liste1.sort()
liste1

> ['Descartes', 'Diderot', 'Erasme', 'Montaigne', 'Montesquieu', 'Rousseau', 'Voltaire']
  

En revanche, les chaînes de caractères et les tupples étant non mutables, ils ne peuvent évidemment pas être modifiés par cette fonction qui ne peut s'appliquer.

nom = "cedric"
nom.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  AttributeError: 'str' object has no attribute 'sort'

Si la liste contient des éléments de type int ou float et des éléments str, alors les éléments de type str sont placés à la fin alors que la suite est bien ordonnée en ce qui concerne les nombres qu'est-ce que soit leur type.

liste1 = ["Descartes","Erasme","Montaigne","Montesquieu","Diderot","Rousseau","Voltaire"]
liste2 = [5,10,7,3]
liste1 = liste1+liste2
liste1.sort()
liste1

> [3, 5, 7, 10, 'Descartes', 'Descartes', 'Diderot', 'Erasme', 'Montaigne', 'Montesquieu', 'Rousseau', 'Voltaire']

liste3 = [1.5, 3.5, 6.2, 10.5]
liste1 = liste1+liste3
liste1.sort()
liste1

> [1.5, 3, 3.5, 5, 6.2, 7, 10, 10.5, 'Descartes', 'Descartes', 'Diderot', 'Erasme', 'Montaigne', 'Montesquieu', 'Rousseau', 'Voltaire']
  

Avec les dictionnaires, les choses se gâtent un peu. Que trier ? les clés, les valeurs ? En utilisant la fonction sorted, on obtient un premier résultat.

dictionnaire2 = {'nom':'Descartes','prenom':'René','age':'?'}
dictionnaire2

> {'nom': 'Descartes', 'age': '?', 'prenom': 'Ren\xc3\xa9'}

sorted(dictionnaire2)

> ['age', 'nom', 'prenom']
J'ai souvent vu des personnes effectuant un tri pour rapprocher les éléments similaires et éventuellement trouver des doublons, comme on le ferait en cliquant sur les colonnes dans un navigateur de fichiers. Pour trouver des éléments similaires, il y a bien plus simple, rapide et fiable count()
nom = "cedric"
nom.count('c')
> 2  

ou sur des listes :

liste1=["Descartes","Erasme","Montaigne","Montesquieu","Diderot","Rousseau","Voltaire"]
liste1.count('Descartes')

> 1

liste1.append('Descartes')
liste1.count('Descartes')

> 2  

On trie aussi souvent pour connaître la plus petite et la plus grande valeur. Il est alors possible d'utiliser les fonctions de bases min() et max().

liste2 = [5,10,7,3]
min(liste2)

> 3

max(liste2)

> 10  

et même d'en effectuer la somme avec sum() ce qui évite parfois d'avoir recours à des procédés plus longs et complexes :

liste2 = [5,10,7,3]
sum(liste2)

> 25  

min() et max() fonctionnent aussi sur les chaînes et les éléments textuels :

nom = "cedric"
min(nom)

> 'c'

max(nom)

> 'r'

liste1=["Descartes","Erasme","Montaigne","Montesquieu","Diderot","Rousseau","Voltaire"]
max(liste1)

> 'Voltaire'

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.