You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

sort.md 1.7 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. % notions: sort, lambdas, sort avec une fonction key()
  2. # Trier des listes
  3. # sort() - ordre naturel
  4. ```python
  5. >>> nombres = [2, 3, 1, 5]
  6. >>> nombres.sort()
  7. >>> nombres
  8. [1, 2, 3, 5]
  9. ```
  10. Notez que la liste est modifiée *sur place*.
  11. # sort() - ordre alphabétique
  12. ```python
  13. >>> mots = ["abeille", "faucon", "chat"]
  14. >>> mots.sort()
  15. >>> mots
  16. ['abeille', 'chat', 'faucon']
  17. ```
  18. # sort() - ordre lexicographique
  19. Pour chaque "liste-élément" on compare le premier élément.
  20. S'il y a égalité, on regarde le deuxième élément, etc:
  21. ```python
  22. >>> composite = [["chat", 1], ["abeille", 2], ["chat", 3]]
  23. >>> composite.sort()
  24. >>> composite
  25. [['abeille', 2], ['chat', 1], ['chat', 3]]
  26. ```
  27. L'ordre alphabétique est l'ordre lexicographique pour les chaînes de caractères :)
  28. # Attention!
  29. Tous les éléments de la liste doivent être comparables deux à deux:
  30. \vfill
  31. ```python
  32. >>> mauvaise_liste = ["un", 2]
  33. >>> mauvaise_liste.sort()
  34. TypeError
  35. ```
  36. # Comparer autrement
  37. Exemple: trier les mots par leur taille avec l'argument `key`
  38. \vfill
  39. ```python
  40. def taille(mot):
  41. return len(mot)
  42. mots = ["chat", "abeille", "faucon"]
  43. mots.sort(key=taille)
  44. >>> mots
  45. ["chat", "faucon", "abeille"]
  46. ```
  47. # Lambda
  48. Sert définir une fonction sans utiliser `def`
  49. ```python
  50. >>> retourne_42 = lambda: 42 # pas d'argument
  51. >>> retourne_42()
  52. 42
  53. >>> ajoute_deux = lambda x: x + 2 # un seul argument
  54. >>> ajoute_deux(3)
  55. 5
  56. >>> multiplie = lambda x, y: x* y # deux arguments
  57. >>> multiplie(2, 3)
  58. 6
  59. ```
  60. Note: le corps de la fonction doit tenir en une seule ligne
  61. # Utilisation avec sort
  62. ```python
  63. >>> mots = ["chat", "abeille", "faucon"]
  64. >>> mots.sort(key=lambda x: len(x))
  65. >>> mots
  66. ["chat", "faucon", "abeille"]
  67. ```
  68. # sorted()
  69. ```python
  70. b = a.copy()
  71. b.sort()
  72. # or
  73. b = sorted(a)
  74. ```