397 lines
7.8 KiB
Plaintext
397 lines
7.8 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "b8f17c0e",
|
|
"metadata": {},
|
|
"source": [
|
|
"# # Structures imbriquées et compréhensions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "5c98615f",
|
|
"metadata": {},
|
|
"source": [
|
|
"> Il est possible de combiner listes, tuples, et dictionnaires. Avec la syntaxe des compréhensions, l'écriture des listes et dictionnaires semble plus élègante."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "6a42e2e0",
|
|
"metadata": {},
|
|
"source": [
|
|
"----"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2cda11f3",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Les structures imbriquées"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ca8a7b82",
|
|
"metadata": {},
|
|
"source": [
|
|
"On peut imbriquer des listes, des tuples et des dictionnaires. Par contre, les clés de dictionnaire ne peuvent pas muter.\n",
|
|
"\n",
|
|
"De ce fait, nous pouvons construire des listes de listes, des listes de tuples, des listes de dictionnaires, des tuples de listes, des dictionnaires de tuples..."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"id": "e3846d2b",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(-1, 0)"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"lst = [(4,5), (-1, 0), (2.5, 1)]\n",
|
|
"len (lst)\n",
|
|
"lst[1]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "15b98fb6",
|
|
"metadata": {},
|
|
"source": [
|
|
"Ici, on crée une liste de trois tuples.\n",
|
|
"\n",
|
|
"Que peuvent représenter ces trois tuples ?\n",
|
|
"\n",
|
|
"On peut vérifier qu'il s'agut bien d'un tuple :"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "7ce7324e",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"tuple"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"t = lst[1]\n",
|
|
"type(t)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8edf8304",
|
|
"metadata": {},
|
|
"source": [
|
|
"On peut également accéder directement à l'abscisse ou à l'ordonnée d'un point :"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "056d9616",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"1"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"lst[2][1]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "3622be65",
|
|
"metadata": {},
|
|
"source": [
|
|
"Ici, on accède donc à la première valeur du tuple n°2."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8001f10a",
|
|
"metadata": {},
|
|
"source": [
|
|
"------"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "572e8c71",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Parcours"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "bbd95e5a",
|
|
"metadata": {},
|
|
"source": [
|
|
"Soit une liste de dictionnaires"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "7ad98a69",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"persos = [{\"prenom\" : \"Bilbo\", \"nom\" : \"Baggins\", \"age\" : 111},\n",
|
|
" {\"prenom\" : \"Frodo\", \"nom\": \"Baggins\", \"age\" : 33},\n",
|
|
" {\"prenom\" : \"Sam\", \"nom\": \"Gamgee\", \"age\" : 21}]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "79500e4c",
|
|
"metadata": {},
|
|
"source": [
|
|
"On peut parcourir cette liste en séparant chaque dictionnaire :"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "e1f9d519",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"----------\n",
|
|
"prenom : Bilbo\n",
|
|
"nom : Baggins\n",
|
|
"age : 111\n",
|
|
"----------\n",
|
|
"prenom : Frodo\n",
|
|
"nom : Baggins\n",
|
|
"age : 33\n",
|
|
"----------\n",
|
|
"prenom : Sam\n",
|
|
"nom : Gamgee\n",
|
|
"age : 21\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"for p in persos:\n",
|
|
" print (\"----------\")\n",
|
|
" for k, v in p.items():\n",
|
|
" print (k, ' : ', v)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "2e16c4c1",
|
|
"metadata": {},
|
|
"source": [
|
|
"Que fait la première boucle ? La seconde ?"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "64e9f3d8",
|
|
"metadata": {},
|
|
"source": [
|
|
"------"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "8c553978",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Les compréhensions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "37f82c8b",
|
|
"metadata": {},
|
|
"source": [
|
|
"> La notation en compréhension permet de créer une liste ou un dictionnaire sans en lister les élèments de manière explicite."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "c051c29f",
|
|
"metadata": {},
|
|
"source": [
|
|
"Par exemple, pour créer une liste comportant les entiers de 2 à 10 inclus :"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"id": "2ff74969",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[2, 3, 4, 5, 6, 7, 8, 9, 10]"
|
|
]
|
|
},
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"[i for i in range (2, 11)]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ba1daaa0",
|
|
"metadata": {},
|
|
"source": [
|
|
"On peut aussi appliquer des fonctions à chaque élément :"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"id": "a1f0ed4a",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[4, 9, 16, 25, 36, 49, 64, 81, 100]"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"[i ** 2 for i in range (2, 11)]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "25813435",
|
|
"metadata": {},
|
|
"source": [
|
|
"Enfin, il est possible d'appliquer des conditions dans votre déclaration de structures:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"id": "34096ef5",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"[9, 49, 169, 289, 529, 729, 1089, 1369, 1849, 2209]"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"[i ** 2 for i in range (2, 51) if (i ** 2) % 10 == 9]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "cf329e0d",
|
|
"metadata": {},
|
|
"source": [
|
|
"Que fait cette instruction ?\n",
|
|
"\n",
|
|
"Pour les dictionnaires : la syntaxe est la même, il faut juste préciser la clé et la valeur de chaque élèment :"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "f974717b",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000}"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"{k: k ** 3 for k in range (2, 11)}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "ae71eaa0",
|
|
"metadata": {},
|
|
"source": [
|
|
"Cela va créer un dictionnaire donc chaque clé sera un nombre entre 2 et 11 non compris, et où la valeur de chaque clé sera le cube de la clé associée.\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.8.8"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|