[{"data":1,"prerenderedAt":996},["ShallowReactive",2],{"page-\u002Fpython\u002Fcollections":3,"pieces-python":953,"autour-\u002Fpython\u002Fcollections":978,"prerequis-\u002Fpython\u002Fcollections":983,"plan-python":985},{"id":4,"title":5,"body":6,"description":925,"extension":926,"ligne":45,"meta":927,"motsCles":928,"navigation":89,"niveau":931,"path":932,"prerequis":933,"ressources":935,"seo":944,"sources":945,"stem":951,"__hash__":952},"docs\u002Fpython\u002F04.collections.md","Listes, dictionnaires et tuples",{"type":7,"value":8,"toc":914},"minimark",[9,14,27,31,40,148,166,181,226,230,241,274,285,289,304,396,403,426,432,436,443,491,504,508,514,556,563,567,659,690,693,697,703,797,813,816,856,865,869,910],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,24],"ul",{},[18,19,20],"li",{},"Stocker plusieurs valeurs dans une liste, un tuple ou un dictionnaire.",[18,22,23],{},"Choisir la bonne structure selon le besoin.",[18,25,26],{},"Fabriquer une nouvelle liste en une ligne avec une compréhension.",[10,28,30],{"id":29},"les-listes","Les listes",[32,33,34,35,39],"p",{},"Une ",[36,37,38],"strong",{},"liste"," est une suite ordonnée de valeurs, que l'on peut modifier. Elle s'écrit entre crochets.",[41,42,47],"pre",{"className":43,"code":44,"language":45,"meta":46,"style":46},"language-python shiki shiki-themes github-light-default github-dark-default github-dark-default","ingredients = [\"farine\", \"oeufs\", \"lait\"]\n\nprint(ingredients[0])\nprint(ingredients[-1])\ningredients.append(\"sucre\")\nprint(len(ingredients))\n","python","",[48,49,50,84,91,107,122,134],"code",{"__ignoreMap":46},[51,52,55,59,63,66,70,73,76,78,81],"span",{"class":53,"line":54},"line",1,[51,56,58],{"class":57},"scfrF","ingredients ",[51,60,62],{"class":61},"sOnC1","=",[51,64,65],{"class":57}," [",[51,67,69],{"class":68},"shWOn","\"farine\"",[51,71,72],{"class":57},", ",[51,74,75],{"class":68},"\"oeufs\"",[51,77,72],{"class":57},[51,79,80],{"class":68},"\"lait\"",[51,82,83],{"class":57},"]\n",[51,85,87],{"class":53,"line":86},2,[51,88,90],{"emptyLinePlaceholder":89},true,"\n",[51,92,94,98,101,104],{"class":53,"line":93},3,[51,95,97],{"class":96},"s5iOY","print",[51,99,100],{"class":57},"(ingredients[",[51,102,103],{"class":96},"0",[51,105,106],{"class":57},"])\n",[51,108,110,112,114,117,120],{"class":53,"line":109},4,[51,111,97],{"class":96},[51,113,100],{"class":57},[51,115,116],{"class":61},"-",[51,118,119],{"class":96},"1",[51,121,106],{"class":57},[51,123,125,128,131],{"class":53,"line":124},5,[51,126,127],{"class":57},"ingredients.append(",[51,129,130],{"class":68},"\"sucre\"",[51,132,133],{"class":57},")\n",[51,135,137,139,142,145],{"class":53,"line":136},6,[51,138,97],{"class":96},[51,140,141],{"class":57},"(",[51,143,144],{"class":96},"len",[51,146,147],{"class":57},"(ingredients))\n",[32,149,150,151,154,155,158,159,162,163,165],{},"On compte à partir de 0 : ",[48,152,153],{},"ingredients[0]"," est « farine ». L'indice ",[48,156,157],{},"-1"," désigne le dernier élément. ",[48,160,161],{},"append"," ajoute à la fin et ",[48,164,144],{}," donne la taille, ici 4.",[32,167,168,169,172,173,176,177,180],{},"Autres méthodes courantes : ",[48,170,171],{},"remove(\"lait\")"," retire une valeur, ",[48,174,175],{},"sort()"," trie la liste sur place. Une boucle ",[48,178,179],{},"for"," la parcourt :",[41,182,184],{"className":43,"code":183,"language":45,"meta":46,"style":46},"for ingredient in ingredients:\n    print(f\"- {ingredient}\")\n",[48,185,186,199],{"__ignoreMap":46},[51,187,188,190,193,196],{"class":53,"line":54},[51,189,179],{"class":61},[51,191,192],{"class":57}," ingredient ",[51,194,195],{"class":61},"in",[51,197,198],{"class":57}," ingredients:\n",[51,200,201,204,206,209,212,215,218,221,224],{"class":53,"line":86},[51,202,203],{"class":96},"    print",[51,205,141],{"class":57},[51,207,208],{"class":61},"f",[51,210,211],{"class":68},"\"- ",[51,213,214],{"class":61},"{",[51,216,217],{"class":57},"ingredient",[51,219,220],{"class":61},"}",[51,222,223],{"class":68},"\"",[51,225,133],{"class":57},[10,227,229],{"id":228},"extraire-une-tranche","Extraire une tranche",[32,231,232,233,236,237,240],{},"Le ",[36,234,235],{},"slicing"," extrait une partie d'une liste avec ",[48,238,239],{},"[début:fin]",". La fin est exclue.",[41,242,244],{"className":43,"code":243,"language":45,"meta":46,"style":46},"print(ingredients[1:3])\nprint(ingredients[:2])\n",[48,245,246,262],{"__ignoreMap":46},[51,247,248,250,252,254,257,260],{"class":53,"line":54},[51,249,97],{"class":96},[51,251,100],{"class":57},[51,253,119],{"class":96},[51,255,256],{"class":57},":",[51,258,259],{"class":96},"3",[51,261,106],{"class":57},[51,263,264,266,269,272],{"class":53,"line":86},[51,265,97],{"class":96},[51,267,268],{"class":57},"(ingredients[:",[51,270,271],{"class":96},"2",[51,273,106],{"class":57},[32,275,276,277,280,281,284],{},"Résultat : ",[48,278,279],{},"['oeufs', 'lait']"," puis ",[48,282,283],{},"['farine', 'oeufs']",". Le slicing marche aussi sur le texte.",[10,286,288],{"id":287},"les-dictionnaires","Les dictionnaires",[32,290,291,292,295,296,299,300,303],{},"Un ",[36,293,294],{},"dictionnaire"," associe des ",[36,297,298],{},"clés"," à des valeurs. Il s'écrit entre accolades, avec ",[48,301,302],{},"clé: valeur",".",[41,305,307],{"className":43,"code":306,"language":45,"meta":46,"style":46},"recette = {\n    \"nom\": \"Crêpes\",\n    \"portions\": 4,\n    \"vegetarien\": True,\n}\n\nprint(recette[\"nom\"])\nrecette[\"temps\"] = 20\n",[48,308,309,319,333,345,357,362,366,379],{"__ignoreMap":46},[51,310,311,314,316],{"class":53,"line":54},[51,312,313],{"class":57},"recette ",[51,315,62],{"class":61},[51,317,318],{"class":57}," {\n",[51,320,321,324,327,330],{"class":53,"line":86},[51,322,323],{"class":68},"    \"nom\"",[51,325,326],{"class":57},": ",[51,328,329],{"class":68},"\"Crêpes\"",[51,331,332],{"class":57},",\n",[51,334,335,338,340,343],{"class":53,"line":93},[51,336,337],{"class":68},"    \"portions\"",[51,339,326],{"class":57},[51,341,342],{"class":96},"4",[51,344,332],{"class":57},[51,346,347,350,352,355],{"class":53,"line":109},[51,348,349],{"class":68},"    \"vegetarien\"",[51,351,326],{"class":57},[51,353,354],{"class":96},"True",[51,356,332],{"class":57},[51,358,359],{"class":53,"line":124},[51,360,361],{"class":57},"}\n",[51,363,364],{"class":53,"line":136},[51,365,90],{"emptyLinePlaceholder":89},[51,367,369,371,374,377],{"class":53,"line":368},7,[51,370,97],{"class":96},[51,372,373],{"class":57},"(recette[",[51,375,376],{"class":68},"\"nom\"",[51,378,106],{"class":57},[51,380,382,385,388,391,393],{"class":53,"line":381},8,[51,383,384],{"class":57},"recette[",[51,386,387],{"class":68},"\"temps\"",[51,389,390],{"class":57},"] ",[51,392,62],{"class":61},[51,394,395],{"class":96}," 20\n",[32,397,398,399,402],{},"On lit une valeur avec sa clé entre crochets. Écrire une clé qui n'existe pas la crée. Pour éviter une erreur si la clé manque, utilise ",[48,400,401],{},"get"," :",[41,404,406],{"className":43,"code":405,"language":45,"meta":46,"style":46},"print(recette.get(\"prix\", \"inconnu\"))\n",[48,407,408],{"__ignoreMap":46},[51,409,410,412,415,418,420,423],{"class":53,"line":54},[51,411,97],{"class":96},[51,413,414],{"class":57},"(recette.get(",[51,416,417],{"class":68},"\"prix\"",[51,419,72],{"class":57},[51,421,422],{"class":68},"\"inconnu\"",[51,424,425],{"class":57},"))\n",[32,427,428,429,303],{},"Le deuxième argument est la valeur renvoyée par défaut. Résultat : ",[48,430,431],{},"inconnu",[10,433,435],{"id":434},"parcourir-un-dictionnaire","Parcourir un dictionnaire",[32,437,438,439,442],{},"La méthode ",[48,440,441],{},"items()"," donne chaque couple clé et valeur.",[41,444,446],{"className":43,"code":445,"language":45,"meta":46,"style":46},"for cle, valeur in recette.items():\n    print(f\"{cle} : {valeur}\")\n",[48,447,448,460],{"__ignoreMap":46},[51,449,450,452,455,457],{"class":53,"line":54},[51,451,179],{"class":61},[51,453,454],{"class":57}," cle, valeur ",[51,456,195],{"class":61},[51,458,459],{"class":57}," recette.items():\n",[51,461,462,464,466,468,470,472,475,477,480,482,485,487,489],{"class":53,"line":86},[51,463,203],{"class":96},[51,465,141],{"class":57},[51,467,208],{"class":61},[51,469,223],{"class":68},[51,471,214],{"class":61},[51,473,474],{"class":57},"cle",[51,476,220],{"class":61},[51,478,479],{"class":68}," : ",[51,481,214],{"class":61},[51,483,484],{"class":57},"valeur",[51,486,220],{"class":61},[51,488,223],{"class":68},[51,490,133],{"class":57},[32,492,493,496,497,500,501,303],{},[48,494,495],{},"keys()"," donne les clés seules et ",[48,498,499],{},"values()"," les valeurs seules. Pour tester la présence d'une clé : ",[48,502,503],{},"\"nom\" in recette",[10,505,507],{"id":506},"les-tuples","Les tuples",[32,509,291,510,513],{},[36,511,512],{},"tuple"," ressemble à une liste, mais il est immuable : on ne peut plus le modifier après sa création. Il s'écrit entre parenthèses.",[41,515,517],{"className":43,"code":516,"language":45,"meta":46,"style":46},"position = (48.85, 2.35)\nlatitude, longitude = position\nprint(latitude)\n",[48,518,519,539,549],{"__ignoreMap":46},[51,520,521,524,526,529,532,534,537],{"class":53,"line":54},[51,522,523],{"class":57},"position ",[51,525,62],{"class":61},[51,527,528],{"class":57}," (",[51,530,531],{"class":96},"48.85",[51,533,72],{"class":57},[51,535,536],{"class":96},"2.35",[51,538,133],{"class":57},[51,540,541,544,546],{"class":53,"line":86},[51,542,543],{"class":57},"latitude, longitude ",[51,545,62],{"class":61},[51,547,548],{"class":57}," position\n",[51,550,551,553],{"class":53,"line":93},[51,552,97],{"class":96},[51,554,555],{"class":57},"(latitude)\n",[32,557,558,559,562],{},"La deuxième ligne ",[36,560,561],{},"déballe"," le tuple en deux variables. Utilise un tuple pour un petit groupe de valeurs liées qui ne change pas. Une fonction qui renvoie plusieurs valeurs renvoie en fait un tuple.",[10,564,566],{"id":565},"choisir-la-bonne-structure","Choisir la bonne structure",[568,569,570,589],"table",{},[571,572,573],"thead",{},[574,575,576,580,583,586],"tr",{},[577,578,579],"th",{},"Structure",[577,581,582],{},"Syntaxe",[577,584,585],{},"Modifiable",[577,587,588],{},"Quand l'utiliser",[590,591,592,609,625,640],"tbody",{},[574,593,594,598,603,606],{},[595,596,597],"td",{},"Liste",[595,599,600],{},[48,601,602],{},"[1, 2]",[595,604,605],{},"oui",[595,607,608],{},"Une suite d'éléments du même genre.",[574,610,611,614,619,622],{},[595,612,613],{},"Tuple",[595,615,616],{},[48,617,618],{},"(1, 2)",[595,620,621],{},"non",[595,623,624],{},"Un petit groupe fixe de valeurs liées.",[574,626,627,630,635,637],{},[595,628,629],{},"Dictionnaire",[595,631,632],{},[48,633,634],{},"{\"a\": 1}",[595,636,605],{},[595,638,639],{},"Retrouver une valeur par son nom.",[574,641,642,649,654,656],{},[595,643,644,645,648],{},"Ensemble (",[48,646,647],{},"set",")",[595,650,651],{},[48,652,653],{},"{1, 2}",[595,655,605],{},[595,657,658],{},"Éliminer les doublons.",[41,660,662],{"className":43,"code":661,"language":45,"meta":46,"style":46},"print(set([\"sel\", \"poivre\", \"sel\"]))\n",[48,663,664],{"__ignoreMap":46},[51,665,666,668,670,672,675,678,680,683,685,687],{"class":53,"line":54},[51,667,97],{"class":96},[51,669,141],{"class":57},[51,671,647],{"class":96},[51,673,674],{"class":57},"([",[51,676,677],{"class":68},"\"sel\"",[51,679,72],{"class":57},[51,681,682],{"class":68},"\"poivre\"",[51,684,72],{"class":57},[51,686,677],{"class":68},[51,688,689],{"class":57},"]))\n",[32,691,692],{},"L'ensemble garde chaque valeur une seule fois, sans ordre garanti.",[10,694,696],{"id":695},"les-compréhensions","Les compréhensions",[32,698,34,699,702],{},[36,700,701],{},"compréhension de liste"," construit une nouvelle liste à partir d'une autre, en une seule expression.",[41,704,706],{"className":43,"code":705,"language":45,"meta":46,"style":46},"prix = [3.5, 8, 12]\navec_taxe = [p * 1.1 for p in prix]\nchers = [p for p in prix if p > 5]\nprint(chers)\n",[48,707,708,732,759,790],{"__ignoreMap":46},[51,709,710,713,715,717,720,722,725,727,730],{"class":53,"line":54},[51,711,712],{"class":57},"prix ",[51,714,62],{"class":61},[51,716,65],{"class":57},[51,718,719],{"class":96},"3.5",[51,721,72],{"class":57},[51,723,724],{"class":96},"8",[51,726,72],{"class":57},[51,728,729],{"class":96},"12",[51,731,83],{"class":57},[51,733,734,737,739,742,745,748,751,754,756],{"class":53,"line":86},[51,735,736],{"class":57},"avec_taxe ",[51,738,62],{"class":61},[51,740,741],{"class":57}," [p ",[51,743,744],{"class":61},"*",[51,746,747],{"class":96}," 1.1",[51,749,750],{"class":61}," for",[51,752,753],{"class":57}," p ",[51,755,195],{"class":61},[51,757,758],{"class":57}," prix]\n",[51,760,761,764,766,768,770,772,774,777,780,782,785,788],{"class":53,"line":93},[51,762,763],{"class":57},"chers ",[51,765,62],{"class":61},[51,767,741],{"class":57},[51,769,179],{"class":61},[51,771,753],{"class":57},[51,773,195],{"class":61},[51,775,776],{"class":57}," prix ",[51,778,779],{"class":61},"if",[51,781,753],{"class":57},[51,783,784],{"class":61},">",[51,786,787],{"class":96}," 5",[51,789,83],{"class":57},[51,791,792,794],{"class":53,"line":109},[51,793,97],{"class":96},[51,795,796],{"class":57},"(chers)\n",[32,798,276,799,802,803,806,807,809,810,812],{},[48,800,801],{},"[8, 12]",". La forme est ",[48,804,805],{},"[expression for élément in suite if condition]",", la condition étant facultative. Elle équivaut à une boucle ",[48,808,179],{}," qui appelle ",[48,811,161],{},", en plus court.",[32,814,815],{},"Le même principe existe pour les dictionnaires :",[41,817,819],{"className":43,"code":818,"language":45,"meta":46,"style":46},"longueurs = {nom: len(nom) for nom in [\"riz\", \"pâtes\"]}\n",[48,820,821],{"__ignoreMap":46},[51,822,823,826,828,831,833,836,838,841,843,845,848,850,853],{"class":53,"line":54},[51,824,825],{"class":57},"longueurs ",[51,827,62],{"class":61},[51,829,830],{"class":57}," {nom: ",[51,832,144],{"class":96},[51,834,835],{"class":57},"(nom) ",[51,837,179],{"class":61},[51,839,840],{"class":57}," nom ",[51,842,195],{"class":61},[51,844,65],{"class":57},[51,846,847],{"class":68},"\"riz\"",[51,849,72],{"class":57},[51,851,852],{"class":68},"\"pâtes\"",[51,854,855],{"class":57},"]}\n",[857,858,859],"tip",{},[32,860,861,862,864],{},"Si une compréhension devient longue ou difficile à relire, reviens à une boucle ",[48,863,179],{}," classique. La clarté passe avant la concision.",[10,866,868],{"id":867},"à-retenir","À retenir",[15,870,871,878,888,895,901,907],{},[18,872,873,874,877],{},"Une liste ",[48,875,876],{},"[]"," est ordonnée et modifiable ; on y accède par indice, à partir de 0.",[18,879,880,881,884,885,887],{},"Un dictionnaire ",[48,882,883],{},"{}"," associe une clé à une valeur ; ",[48,886,401],{}," évite l'erreur sur une clé absente.",[18,889,890,891,894],{},"Un tuple ",[48,892,893],{},"()"," est immuable et se déballe en plusieurs variables.",[18,896,897,898,900],{},"Un ensemble ",[48,899,647],{}," supprime les doublons.",[18,902,903,904,906],{},"Le slicing ",[48,905,239],{}," extrait une partie, la fin étant exclue.",[18,908,909],{},"Une compréhension crée une liste ou un dictionnaire en une expression.",[911,912,913],"style",{},"html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":46,"searchDepth":86,"depth":93,"links":915},[916,917,918,919,920,921,922,923,924],{"id":12,"depth":86,"text":13},{"id":29,"depth":86,"text":30},{"id":228,"depth":86,"text":229},{"id":287,"depth":86,"text":288},{"id":434,"depth":86,"text":435},{"id":506,"depth":86,"text":507},{"id":565,"depth":86,"text":566},{"id":695,"depth":86,"text":696},{"id":867,"depth":86,"text":868},"Regrouper des valeurs avec les listes, les dictionnaires et les tuples, puis les transformer avec les compréhensions.","md",{},[38,294,512,161,929,930,235,701,647],"clé","items","intermediaire","\u002Fpython\u002Fcollections",[934],"\u002Fpython\u002Ffonctions-et-modules",[936,940],{"nom":937,"url":938,"type":939},"Le tutoriel officiel Python, structures de données","https:\u002F\u002Fdocs.python.org\u002Ffr\u002F3\u002Ftutorial\u002Fdatastructures.html","doc",{"nom":941,"url":942,"type":943},"OpenClassrooms, Apprenez les bases du langage Python","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F7168871-apprenez-les-bases-du-langage-python","cours",{"title":5,"description":925},[946,948],{"nom":947,"url":938},"Documentation de Python, les structures de données",{"nom":949,"url":950},"Documentation de Python, types natifs","https:\u002F\u002Fdocs.python.org\u002Ffr\u002F3\u002Flibrary\u002Fstdtypes.html","python\u002F04.collections","DnJeKuCbG6qb4_LcwjI0kAGb7Va1vsO3IFvJqc1H4jI",[954,958,962,965,966,970,974],{"path":955,"title":956,"stem":957},"\u002Fpython\u002Fpremiers-pas","Premiers pas avec Python","python\u002F01.premiers-pas",{"path":959,"title":960,"stem":961},"\u002Fpython\u002Fconditions-et-boucles","Conditions et boucles","python\u002F02.conditions-et-boucles",{"path":934,"title":963,"stem":964},"Fonctions et modules","python\u002F03.fonctions-et-modules",{"path":932,"title":5,"stem":951},{"path":967,"title":968,"stem":969},"\u002Fpython\u002Ffichiers-et-exceptions","Fichiers, exceptions et JSON","python\u002F05.fichiers-et-exceptions",{"path":971,"title":972,"stem":973},"\u002Fpython\u002Fclasses-et-environnements","Classes, annotations et environnements virtuels","python\u002F06.classes-et-environnements",{"path":975,"title":976,"stem":977},"\u002Fpython","Python","python\u002Findex",[979,981],{"title":963,"path":934,"stem":964,"description":980,"children":-1},"Écrire ses propres fonctions avec def et return, puis ranger et réutiliser son code grâce aux modules et à import.",{"title":968,"path":967,"stem":969,"description":982,"children":-1},"Lire et écrire des fichiers avec with open, gérer les erreurs avec try et except, et sauvegarder des données au format JSON.",[984],{"path":934,"title":963,"ligne":45},[986,988,989,990,991,992,994],{"path":955,"title":956,"niveau":987,"stem":957},"debutant",{"path":959,"title":960,"niveau":987,"stem":961},{"path":934,"title":963,"niveau":987,"stem":964},{"path":932,"title":5,"niveau":931,"stem":951},{"path":967,"title":968,"niveau":931,"stem":969},{"path":971,"title":972,"niveau":993,"stem":973},"avance",{"path":975,"title":976,"niveau":995,"stem":977},"memo",1794583459485]