{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
En Python, avec l'opérateur `<` (ou `>`, `==`, `<=`, `>=`), il est possible de comparer des nombres
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "5 < 10" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "3 < 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ou des chaînes de caractères (c'est l'ordre alphabétique qui est alors utilisé)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "'Arthur' < 'Bérénice'" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "'Gaëlle' < 'Boris'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python offre deux fonctions permettant d'effectuer des opérations de tri.
\n", "\n", "## La fonction `sorted` \n", "\n", "Celle-ci prend en argument un tableau et renvoie un *nouveau tableau*, trié, contenant les mêmes éléments." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t = [12, 5, 3, 6, 8, 10]\n", "t1=sorted(t)\n", "print(t1)\n", "print(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On voit que `t` n'a pas été modifié." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cette fonction permet aussi de trier des chaînes de caractères, en utilisant l'odre alphabétique." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sorted([\"poire\", \"pomme\", \"cerise\", 'kiwi'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## La fonction `sort` \n", "Celle-ci s'applique à un tableau, ne renvoie rien, mais *modifie* le tableau d'origine." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t.sort()\n", "print(t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On voit que `t` a été modifié." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On peut aussi trier directement un tableau de chaînes de caractères avec `sort`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "fruits = [\"poire\", \"pomme\", \"cerise\", 'kiwi']\n", "fruits.sort()\n", "fruits" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Question 1** : Que vaut le tableau `t` après l'exécution des instructions suivantes ? *(Vérifiez ensuite en écrivant et en exécutant ces instructions dans une nouvelle cellule)*.\n", "\n", "```python\n", "t = [4, 5, 1, 3, 7]\n", "t.sort()\n", "t[0] = 2\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Réponse :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Question 2** : Que valent les tableaux `t` et `t1` après l'exécution des instructions suivantes ? *(Vérifiez ensuite en écrivant et en exécutant ces instructions dans une nouvelle cellule)*.\n", "\n", "```python\n", "t = ['Adèle', 'Zoé', 'Hugo', 'Clément']\n", "t1 = sorted(t)\n", "t1[0] = 'Arnaud'\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Réponse :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Question 3**: Quel est le contenu du tableau `tab` à l'issue des instructions suivantes ? *(Vérifiez ensuite en écrivant et en exécutant ces instructions dans une nouvelle cellule)*.\n", "\n", "```python\n", "tab = ['2', '1', '3', '12', '10', '5']\n", "tab.sort()\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Réponse : " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ordre lexicographique\n", "\n", "Il est possible de trier des données selon plusieurs critères.Par exemple, on peut vouloir afficher la liste de tous les pays par ordre alphabétique ou bien encore trier les pays selon leur superficie, selon le nombre d'habitants...
\n", "Avant celà, il faut la créer à partir du fichier csv et modifier le type de certains champs
\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import csv\n", "Pays = []\n", "with open('countries.csv', newline='',encoding=\"UTF-8\") as csvfile:\n", " reader = csv.DictReader(csvfile, delimiter=';') # Objet DictReader (itérateur)\n", " for ligne in reader:\n", " Pays.append(dict(ligne)) # Conversion du type OrderedDict en dictionnaire\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# on doit transformer le type des champs Population et Superficie\n", "for p in Pays:\n", " p[\"Population\"]=int(p[\"Population\"])\n", " p[\"Superficie\"]=float(p[\"Superficie\"])\n", "print(Pays)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Les deux fonctions `sorted` et `sort` sont incapables de comparer deux dictionnaires directement . Pour pouvoir utiliser ces fonctions, il va falloir leur donner en paramètre ce que l'on appelle une *clé*. ( attention ne pas confondre ce terme avec les clés d'un dictionnaire
Cette clé est en fait une fonction qui prend en paramètre un dictionnaire et qui renvoie la valeur du champ que l'on souhaite comparer. Cela doit nécessairement être des éléments que Python sait comparer (nombres, chaînes de caractères, tuples).\n",
"\n",
"Si on veut trier les pays par l'ordre alphabétique des monnaies, on définit la fonction suivante."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def monnaie(p):\n",
" \"\"\" fonction qui renvoie la valeur de clé Monnaie du dictionnaire p \"\"\"\n",
" return p[\"Monnaie\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ensuite, on peut appeler la fonction `sorted` sur le tableau `pays` en précisant qu'il faut utiliser la fonction `monnaie` à chaque fois que deux éléments du tableau doivent être comparés.
On l'indique en passant `key=monnaie` à la fonction `sorted`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pays_trié_monnaie = sorted(Pays, key=monnaie)\n",
"pays_trié_monnaie"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Affichage des monnaies et noms de pays\n",
"for p in pays_trié_monnaie:\n",
" print(p[\"Monnaie\"], p[\"Name\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Si on veut trier plutôt dans l'ordre inverse, c'est-à-dire du plus grand au plus petit, il faut passer une autre option à la fonction `sorted`, à savoir `reverse=True`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"pays_trié_monnaie_bis = sorted(Pays, key=monnaie,reverse=True)\n",
"for p in pays_trié_monnaie_bis:\n",
" print(p[\"Monnaie\"],p[\"Name\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Question 6 :** Triez la table `pays` suivant la population décroissante.
*Indication :* n'oubliez pas de commencer par définir la fonction qui servira de clé de tri à la fonction `sorted`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# à vous de jouer !\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"