[{"data":1,"prerenderedAt":9456},["ShallowReactive",2],{"navigation":3,"chapter-cours-nsi-1ere\u002Fpd-tables-donnees":585,"chapter-index-nsi-1ere\u002Fpd-tables-donnees":6739,"chapter-memo-nsi-1ere\u002Fpd-tables-donnees":6854},[4,224,440],{"title":5,"path":6,"stem":7,"children":8},"SNT — Seconde","\u002Fsnt-2nde","0.snt-2nde\u002F0.index",[9,10,14,36,66,92,118,144,162,184,206],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"REVIEW pédagogique — SNT 2nde","\u002Fsnt-2nde\u002Freview","0.snt-2nde\u002FREVIEW",{"title":15,"path":16,"stem":17,"children":18},"Internet","\u002Fsnt-2nde\u002Fsa-internet","0.snt-2nde\u002Fsa-internet\u002F0.index",[19,20,24,28,32],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23},"Adresses symboliques et DNS","\u002Fsnt-2nde\u002Fsa-internet\u002Fadresses-dns","0.snt-2nde\u002Fsa-internet\u002F1.adresses-dns",{"title":25,"path":26,"stem":27},"Internet et les réseaux physiques","\u002Fsnt-2nde\u002Fsa-internet\u002Freseaux-physiques","0.snt-2nde\u002Fsa-internet\u002F2.reseaux-physiques",{"title":29,"path":30,"stem":31},"Protocoles TCP\u002FIP et routage des paquets","\u002Fsnt-2nde\u002Fsa-internet\u002Ftcp-ip-routage","0.snt-2nde\u002Fsa-internet\u002F3.tcp-ip-routage",{"title":33,"path":34,"stem":35},"Réseaux pair-à-pair","\u002Fsnt-2nde\u002Fsa-internet\u002Fpair-a-pair","0.snt-2nde\u002Fsa-internet\u002F4.pair-a-pair",{"title":37,"path":38,"stem":39,"children":40},"Le Web","\u002Fsnt-2nde\u002Fsb-web","0.snt-2nde\u002Fsb-web\u002F0.index",[41,42,46,50,54,58,62],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Histoire du Web","\u002Fsnt-2nde\u002Fsb-web\u002Fhistoire-web","0.snt-2nde\u002Fsb-web\u002F1.histoire-web",{"title":47,"path":48,"stem":49},"URL et hypertexte","\u002Fsnt-2nde\u002Fsb-web\u002Furl-hypertexte","0.snt-2nde\u002Fsb-web\u002F2.url-hypertexte",{"title":51,"path":52,"stem":53},"HTML et CSS — le contenu et la présentation","\u002Fsnt-2nde\u002Fsb-web\u002Fhtml-css","0.snt-2nde\u002Fsb-web\u002F3.html-css",{"title":55,"path":56,"stem":57},"Client-serveur et requêtes HTTP","\u002Fsnt-2nde\u002Fsb-web\u002Fclient-serveur-http","0.snt-2nde\u002Fsb-web\u002F4.client-serveur-http",{"title":59,"path":60,"stem":61},"Moteurs de recherche","\u002Fsnt-2nde\u002Fsb-web\u002Fmoteurs-recherche","0.snt-2nde\u002Fsb-web\u002F5.moteurs-recherche",{"title":63,"path":64,"stem":65},"Sécurité du navigateur et notions juridiques","\u002Fsnt-2nde\u002Fsb-web\u002Fsecurite-droits","0.snt-2nde\u002Fsb-web\u002F6.securite-droits",{"title":67,"path":68,"stem":69,"children":70},"Les réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F0.index",[71,72,76,80,84,88],{"title":67,"path":68,"stem":69},{"title":73,"path":74,"stem":75},"Panorama des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpanorama-rs","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F1.panorama-rs",{"title":77,"path":78,"stem":79},"Identité numérique et authentification","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fidentite-numerique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F2.identite-numerique",{"title":81,"path":82,"stem":83},"Le modèle économique des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fmodele-economique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F3.modele-economique",{"title":85,"path":86,"stem":87},"Petit monde et graphes","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpetit-monde-graphes","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F4.petit-monde-graphes",{"title":89,"path":90,"stem":91},"La cyberviolence","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fcyberviolence","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F5.cyberviolence",{"title":93,"path":94,"stem":95,"children":96},"Les données structurées et leur traitement","\u002Fsnt-2nde\u002Fsd-donnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F0.index",[97,98,102,106,110,114],{"title":93,"path":94,"stem":95},{"title":99,"path":100,"stem":101},"Données et formats","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-formats","0.snt-2nde\u002Fsd-donnees-structurees\u002F1.donnees-formats",{"title":103,"path":104,"stem":105},"Données structurées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F2.donnees-structurees",{"title":107,"path":108,"stem":109},"Métadonnées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fmetadonnees","0.snt-2nde\u002Fsd-donnees-structurees\u002F3.metadonnees",{"title":111,"path":112,"stem":113},"Traitement de tables","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Ftraitement-tables","0.snt-2nde\u002Fsd-donnees-structurees\u002F4.traitement-tables",{"title":115,"path":116,"stem":117},"Le cloud","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fcloud","0.snt-2nde\u002Fsd-donnees-structurees\u002F5.cloud",{"title":119,"path":120,"stem":121,"children":122},"Localisation, cartographie et mobilité","\u002Fsnt-2nde\u002Fse-localisation-cartographie","0.snt-2nde\u002Fse-localisation-cartographie\u002F0.index",[123,124,128,132,136,140],{"title":119,"path":120,"stem":121},{"title":125,"path":126,"stem":127},"GPS et Galileo — se situer grâce aux satellites","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fgps-galileo","0.snt-2nde\u002Fse-localisation-cartographie\u002F1.gps-galileo",{"title":129,"path":130,"stem":131},"Décoder une trame NMEA","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Ftrame-nmea","0.snt-2nde\u002Fse-localisation-cartographie\u002F2.trame-nmea",{"title":133,"path":134,"stem":135},"Cartes numériques — GeoPortail et OpenStreetMap","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fcartes-numeriques","0.snt-2nde\u002Fse-localisation-cartographie\u002F3.cartes-numeriques",{"title":137,"path":138,"stem":139},"Itinéraires et graphes","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fitineraires-graphes","0.snt-2nde\u002Fse-localisation-cartographie\u002F4.itineraires-graphes",{"title":141,"path":142,"stem":143},"Confidentialité de la position","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fconfidentialite-position","0.snt-2nde\u002Fse-localisation-cartographie\u002F5.confidentialite-position",{"title":145,"path":146,"stem":147,"children":148},"Informatique embarquée et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee","0.snt-2nde\u002Fsf-info-embarquee\u002F0.index",[149,150,154,158],{"title":145,"path":146,"stem":147},{"title":151,"path":152,"stem":153},"Systèmes informatiques embarqués","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fsystemes-embarques","0.snt-2nde\u002Fsf-info-embarquee\u002F1.systemes-embarques",{"title":155,"path":156,"stem":157},"Capteurs et actionneurs","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fcapteurs-actionneurs","0.snt-2nde\u002Fsf-info-embarquee\u002F2.capteurs-actionneurs",{"title":159,"path":160,"stem":161},"IHM et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fihm-objet-connecte","0.snt-2nde\u002Fsf-info-embarquee\u002F3.ihm-objet-connecte",{"title":163,"path":164,"stem":165,"children":166},"Photographie numérique","\u002Fsnt-2nde\u002Fsg-photo-numerique","0.snt-2nde\u002Fsg-photo-numerique\u002F0.index",[167,168,172,176,180],{"title":163,"path":164,"stem":165},{"title":169,"path":170,"stem":171},"Photosites, pixels et résolution","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fpixels-resolution","0.snt-2nde\u002Fsg-photo-numerique\u002F1.pixels-resolution",{"title":173,"path":174,"stem":175},"Les algorithmes de l'appareil photo","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Falgorithmes-photo","0.snt-2nde\u002Fsg-photo-numerique\u002F2.algorithmes-photo",{"title":177,"path":178,"stem":179},"Les métadonnées EXIF","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fmetadonnees-exif","0.snt-2nde\u002Fsg-photo-numerique\u002F3.metadonnees-exif",{"title":181,"path":182,"stem":183},"Traiter une image en Python","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Ftraitement-rgb","0.snt-2nde\u002Fsg-photo-numerique\u002F4.traitement-rgb",{"title":185,"path":186,"stem":187,"children":188},"Notions transversales de programmation","\u002Fsnt-2nde\u002Fsh-prog-notions","0.snt-2nde\u002Fsh-prog-notions\u002F0.index",[189,190,194,198,202],{"title":185,"path":186,"stem":187},{"title":191,"path":192,"stem":193},"Séquences d'instructions et variables","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fsequences-affectations","0.snt-2nde\u002Fsh-prog-notions\u002F1.sequences-affectations",{"title":195,"path":196,"stem":197},"Instructions conditionnelles","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fconditionnelles","0.snt-2nde\u002Fsh-prog-notions\u002F2.conditionnelles",{"title":199,"path":200,"stem":201},"Boucles bornées et non bornées","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fboucles","0.snt-2nde\u002Fsh-prog-notions\u002F3.boucles",{"title":203,"path":204,"stem":205},"Définitions et appels de fonctions","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Ffonctions","0.snt-2nde\u002Fsh-prog-notions\u002F4.fonctions",{"title":207,"path":208,"stem":209,"children":210},"Démo des widgets MDC","\u002Fsnt-2nde\u002Fzz-demo-widgets","0.snt-2nde\u002Fzz-demo-widgets\u002F0.index",[211,212,216,220],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215},"Démo statique — callouts, code, BO, illustration","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fstatique","0.snt-2nde\u002Fzz-demo-widgets\u002F1.statique",{"title":217,"path":218,"stem":219},"Démo interactive — self-eval et python-snippet","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Finteractif","0.snt-2nde\u002Fzz-demo-widgets\u002F2.interactif",{"title":221,"path":222,"stem":223},"Démo · 14 widgets de manipulation NSI","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fwidgets-manipulation","0.snt-2nde\u002Fzz-demo-widgets\u002F3.widgets-manipulation",{"title":225,"path":226,"stem":227,"children":228},"NSI — Première","\u002Fnsi-1ere","1.nsi-1ere\u002F0.index",[229,230,234,256,282,304,328,354,380,410],{"title":225,"path":226,"stem":227},{"title":231,"path":232,"stem":233},"Relecture pédagogique — 8 chapitres NSI 1ère (PA → PH)","\u002Fnsi-1ere\u002Freview","1.nsi-1ere\u002FREVIEW",{"title":235,"path":236,"stem":237,"children":238},"Histoire de l'informatique","\u002Fnsi-1ere\u002Fpa-histoire-info","1.nsi-1ere\u002Fpa-histoire-info\u002F0.index",[239,240,244,248,252],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"De la préantiquité aux machines à calculer","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fpreantiquite-aux-machines","1.nsi-1ere\u002Fpa-histoire-info\u002F1.preantiquite-aux-machines",{"title":245,"path":246,"stem":247},"La machine universelle (1930-1950)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fmachine-universelle","1.nsi-1ere\u002Fpa-histoire-info\u002F2.machine-universelle",{"title":249,"path":250,"stem":251},"Les ordinateurs modernes (1947-1990)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fordinateurs-modernes","1.nsi-1ere\u002Fpa-histoire-info\u002F3.ordinateurs-modernes",{"title":253,"path":254,"stem":255},"Réseaux, Web et IA (1969 à aujourd'hui)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Freseaux-et-web","1.nsi-1ere\u002Fpa-histoire-info\u002F4.reseaux-et-web",{"title":257,"path":258,"stem":259,"children":260},"Représentation des données — types et valeurs","\u002Fnsi-1ere\u002Fpb-types-valeurs","1.nsi-1ere\u002Fpb-types-valeurs\u002F0.index",[261,262,266,270,274,278],{"title":257,"path":258,"stem":259},{"title":263,"path":264,"stem":265},"Bases de numération et entiers positifs","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbases-entiers-positifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F1.bases-entiers-positifs",{"title":267,"path":268,"stem":269},"Entiers relatifs et complément à deux","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fentiers-relatifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F2.entiers-relatifs",{"title":271,"path":272,"stem":273},"Nombres flottants et virgule flottante","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fflottants","1.nsi-1ere\u002Fpb-types-valeurs\u002F3.flottants",{"title":275,"path":276,"stem":277},"Textes et encodages — ASCII, ISO-8859-1, Unicode","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Ftextes-encodages","1.nsi-1ere\u002Fpb-types-valeurs\u002F4.textes-encodages",{"title":279,"path":280,"stem":281},"Valeurs booléennes et opérateurs logiques","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbooleens","1.nsi-1ere\u002Fpb-types-valeurs\u002F5.booleens",{"title":283,"path":284,"stem":285,"children":286},"Représentation des données : types construits","\u002Fnsi-1ere\u002Fpc-types-construits","1.nsi-1ere\u002Fpc-types-construits\u002F0.index",[287,288,292,296,300],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"Tableaux et listes","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftableaux-listes","1.nsi-1ere\u002Fpc-types-construits\u002F1.tableaux-listes",{"title":293,"path":294,"stem":295},"Listes en compréhension","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fcomprehension","1.nsi-1ere\u002Fpc-types-construits\u002F2.comprehension",{"title":297,"path":298,"stem":299},"Tuples et p-uplets nommés","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftuples","1.nsi-1ere\u002Fpc-types-construits\u002F3.tuples",{"title":301,"path":302,"stem":303},"Dictionnaires","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fdictionnaires","1.nsi-1ere\u002Fpc-types-construits\u002F4.dictionnaires",{"title":305,"path":306,"stem":307,"children":308},"Traitement de données en tables","\u002Fnsi-1ere\u002Fpd-tables-donnees","1.nsi-1ere\u002Fpd-tables-donnees\u002F0.index",[309,310,314,318,322],{"title":305,"path":306,"stem":307},{"title":311,"path":312,"stem":313},"Tables et CSV","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftables-csv","1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv",{"title":315,"path":316,"stem":317},"Recherche et filtrage","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Frecherche","1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche",{"title":319,"path":320,"stem":321},"Trier une table","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftri","1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri",{"title":323,"path":324,"stem":325,"children":326},"Fusion et indexation","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ffusion-indexation","1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation",[327],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331,"children":332},"IHM sur le Web","\u002Fnsi-1ere\u002Fpe-ihm-web","1.nsi-1ere\u002Fpe-ihm-web\u002F0.index",[333,334,338,342,346,350],{"title":329,"path":330,"stem":331},{"title":335,"path":336,"stem":337},"HTML et CSS — rappel de structure","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fhtml-css-bases","1.nsi-1ere\u002Fpe-ihm-web\u002F1.html-css-bases",{"title":339,"path":340,"stem":341},"Formulaires HTML","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fformulaires","1.nsi-1ere\u002Fpe-ihm-web\u002F2.formulaires",{"title":343,"path":344,"stem":345},"Événements JavaScript","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fevenements-js","1.nsi-1ere\u002Fpe-ihm-web\u002F3.evenements-js",{"title":347,"path":348,"stem":349},"Manipulation du DOM","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fdom-interaction","1.nsi-1ere\u002Fpe-ihm-web\u002F4.dom-interaction",{"title":351,"path":352,"stem":353},"Client, serveur et HTTP","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fclient-serveur-http","1.nsi-1ere\u002Fpe-ihm-web\u002F5.client-serveur-http",{"title":355,"path":356,"stem":357,"children":358},"Architectures matérielles et systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os","1.nsi-1ere\u002Fpf-archi-os\u002F0.index",[359,360,364,368,372,376],{"title":355,"path":356,"stem":357},{"title":361,"path":362,"stem":363},"Le modèle de von Neumann","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fvon-neumann","1.nsi-1ere\u002Fpf-archi-os\u002F1.von-neumann",{"title":365,"path":366,"stem":367},"Périphériques et interface homme-machine","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fperipheriques-ihm","1.nsi-1ere\u002Fpf-archi-os\u002F2.peripheriques-ihm",{"title":369,"path":370,"stem":371},"Les systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fsystemes-exploitation","1.nsi-1ere\u002Fpf-archi-os\u002F3.systemes-exploitation",{"title":373,"path":374,"stem":375},"Linux et le shell","\u002Fnsi-1ere\u002Fpf-archi-os\u002Flinux-shell","1.nsi-1ere\u002Fpf-archi-os\u002F4.linux-shell",{"title":377,"path":378,"stem":379},"Réseaux et protocoles","\u002Fnsi-1ere\u002Fpf-archi-os\u002Freseaux","1.nsi-1ere\u002Fpf-archi-os\u002F5.reseaux",{"title":381,"path":382,"stem":383,"children":384},"Langages et programmation","\u002Fnsi-1ere\u002Fpg-langages-prog","1.nsi-1ere\u002Fpg-langages-prog\u002F0.index",[385,386,390,394,398,402,406],{"title":381,"path":382,"stem":383},{"title":387,"path":388,"stem":389},"Diversité et unité des langages de programmation","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fdiversite-langages","1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages",{"title":391,"path":392,"stem":393},"Constructions élémentaires","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fconstructions-elementaires","1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires",{"title":395,"path":396,"stem":397},"Fonctions","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Ffonctions","1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions",{"title":399,"path":400,"stem":401},"Spécification d'une fonction","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fspecification","1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification",{"title":403,"path":404,"stem":405},"Mise au point des programmes","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point","1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point",{"title":407,"path":408,"stem":409},"Utilisation de bibliothèques","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fbibliotheques","1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques",{"title":411,"path":412,"stem":413,"children":414},"Algorithmique","\u002Fnsi-1ere\u002Fph-algorithmique","1.nsi-1ere\u002Fph-algorithmique\u002F0.index",[415,416,420,424,428,432,436],{"title":411,"path":412,"stem":413},{"title":417,"path":418,"stem":419},"Parcours séquentiel d'un tableau","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fparcours-sequentiel","1.nsi-1ere\u002Fph-algorithmique\u002F1.parcours-sequentiel",{"title":421,"path":422,"stem":423},"Bases de la complexité","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fcomplexite-bases","1.nsi-1ere\u002Fph-algorithmique\u002F2.complexite-bases",{"title":425,"path":426,"stem":427},"Tris par sélection et par insertion","\u002Fnsi-1ere\u002Fph-algorithmique\u002Ftris","1.nsi-1ere\u002Fph-algorithmique\u002F3.tris",{"title":429,"path":430,"stem":431},"Recherche dichotomique","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fdichotomie","1.nsi-1ere\u002Fph-algorithmique\u002F4.dichotomie",{"title":433,"path":434,"stem":435},"Algorithmes gloutons","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fgloutons","1.nsi-1ere\u002Fph-algorithmique\u002F5.gloutons",{"title":437,"path":438,"stem":439},"Les k plus proches voisins (k-NN)","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fknn","1.nsi-1ere\u002Fph-algorithmique\u002F6.knn",{"title":441,"path":442,"stem":443,"children":444},"NSI — Terminale","\u002Fnsi-tale","2.nsi-tale\u002F0.index",[445,446,450,476,498,536,560],{"title":441,"path":442,"stem":443},{"title":447,"path":448,"stem":449},"Review pédagogique — chapitres NSI Terminale (TA, TB, TC, TD, TE)","\u002Fnsi-tale\u002Freview","2.nsi-tale\u002FREVIEW",{"title":451,"path":452,"stem":453,"children":454},"Structures de données","\u002Fnsi-tale\u002Fta-structures-donnees","2.nsi-tale\u002Fta-structures-donnees\u002F0.index",[455,456,460,464,468,472],{"title":451,"path":452,"stem":453},{"title":457,"path":458,"stem":459},"Objet, classe, interface","\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation","2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation",{"title":461,"path":462,"stem":463},"Implémenter une structure — l'exemple de la file FIFO","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure","2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure",{"title":465,"path":466,"stem":467},"Listes, piles, files, dictionnaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Flistes-piles-files-dict","2.nsi-tale\u002Fta-structures-donnees\u002F3.listes-piles-files-dict",{"title":469,"path":470,"stem":471},"Arbres binaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Farbres-binaires","2.nsi-tale\u002Fta-structures-donnees\u002F4.arbres-binaires",{"title":473,"path":474,"stem":475},"Graphes","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fgraphes","2.nsi-tale\u002Fta-structures-donnees\u002F5.graphes",{"title":477,"path":478,"stem":479,"children":480},"Bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees","2.nsi-tale\u002Ftb-bases-de-donnees\u002F0.index",[481,482,486,490,494],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485},"Le modèle relationnel","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fmodele-relationnel","2.nsi-tale\u002Ftb-bases-de-donnees\u002F1.modele-relationnel",{"title":487,"path":488,"stem":489},"Bases de données relationnelles et anomalies de schéma","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fbase-relationnelle","2.nsi-tale\u002Ftb-bases-de-donnees\u002F2.base-relationnelle",{"title":491,"path":492,"stem":493},"Le langage SQL","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsql","2.nsi-tale\u002Ftb-bases-de-donnees\u002F3.sql",{"title":495,"path":496,"stem":497},"Les systèmes de gestion de bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsgbd","2.nsi-tale\u002Ftb-bases-de-donnees\u002F4.sgbd",{"title":499,"path":500,"stem":501,"children":502},"Architectures matérielles, systèmes d'exploitation et réseaux","\u002Fnsi-tale\u002Ftc-archi-os-reseaux","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F0.index",[503,504,508,512,516,520,524,528,532],{"title":499,"path":500,"stem":501},{"title":505,"path":506,"stem":507},"Le système sur puce (SoC)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fsysteme-sur-puce","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F1.systeme-sur-puce",{"title":509,"path":510,"stem":511},"Processus et ordonnancement par l'OS","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprocessus-os","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F2.processus-os",{"title":513,"path":514,"stem":515},"L'interblocage (deadlock)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Finterblocage","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F3.interblocage",{"title":517,"path":518,"stem":519},"Principes du routage","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Froutage-principes","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F4.routage-principes",{"title":521,"path":522,"stem":523},"Protocoles de routage RIP et OSPF","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprotocoles-rip-ospf","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F5.protocoles-rip-ospf",{"title":525,"path":526,"stem":527},"Chiffrement symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-symetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F6.chiffrement-symetrique",{"title":529,"path":530,"stem":531},"Chiffrement asymétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-asymetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F7.chiffrement-asymetrique",{"title":533,"path":534,"stem":535},"HTTPS — l'échange de clé symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fhttps-tls","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F8.https-tls",{"title":381,"path":537,"stem":538,"children":539},"\u002Fnsi-tale\u002Ftd-langages-prog","2.nsi-tale\u002Ftd-langages-prog\u002F0.index",[540,541,544,548,552,556],{"title":381,"path":537,"stem":538},{"title":403,"path":542,"stem":543},"\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmise-au-point","2.nsi-tale\u002Ftd-langages-prog\u002F1.mise-au-point",{"title":545,"path":546,"stem":547},"Modularité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmodularite","2.nsi-tale\u002Ftd-langages-prog\u002F2.modularite",{"title":549,"path":550,"stem":551},"Récursivité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Frecursivite","2.nsi-tale\u002Ftd-langages-prog\u002F3.recursivite",{"title":553,"path":554,"stem":555},"Paradigmes de programmation","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fparadigmes","2.nsi-tale\u002Ftd-langages-prog\u002F4.paradigmes",{"title":557,"path":558,"stem":559},"Programme comme donnée — calculabilité et indécidabilité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fprogramme-comme-donnee","2.nsi-tale\u002Ftd-langages-prog\u002F5.programme-comme-donnee",{"title":411,"path":561,"stem":562,"children":563},"\u002Fnsi-tale\u002Fte-algorithmique","2.nsi-tale\u002Fte-algorithmique\u002F0.index",[564,565,569,573,577,581],{"title":411,"path":561,"stem":562},{"title":566,"path":567,"stem":568},"Algorithmes sur les arbres binaires","\u002Fnsi-tale\u002Fte-algorithmique\u002Farbres-binaires-algos","2.nsi-tale\u002Fte-algorithmique\u002F1.arbres-binaires-algos",{"title":570,"path":571,"stem":572},"Parcours de graphes — DFS, BFS, cycles, chemins","\u002Fnsi-tale\u002Fte-algorithmique\u002Fgraphes-parcours","2.nsi-tale\u002Fte-algorithmique\u002F2.graphes-parcours",{"title":574,"path":575,"stem":576},"Diviser pour régner","\u002Fnsi-tale\u002Fte-algorithmique\u002Fdiviser-pour-regner","2.nsi-tale\u002Fte-algorithmique\u002F3.diviser-pour-regner",{"title":578,"path":579,"stem":580},"Programmation dynamique","\u002Fnsi-tale\u002Fte-algorithmique\u002Fprogrammation-dynamique","2.nsi-tale\u002Fte-algorithmique\u002F4.programmation-dynamique",{"title":582,"path":583,"stem":584},"Recherche textuelle — l'algorithme de Boyer-Moore","\u002Fnsi-tale\u002Fte-algorithmique\u002Frecherche-textuelle","2.nsi-tale\u002Fte-algorithmique\u002F5.recherche-textuelle",[586,1747,3568,4874],{"id":587,"title":311,"bo":588,"body":591,"description":1734,"eval":1735,"extension":1736,"labo":1735,"meta":1737,"navigation":1181,"path":312,"quizzes":1738,"readingTime":908,"seo":1745,"stem":313,"tp":1735,"__hash__":1746},"cours\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv.md",[589,590],"PD02","PD03",{"type":592,"value":593,"toc":1723},"minimark",[594,599,616,631,635,638,711,725,728,794,798,820,831,849,859,886,890,897,1089,1104,1122,1143,1150,1164,1265,1289,1292,1411,1415,1418,1631,1634,1640,1644,1701,1705,1719],[595,596,598],"h2",{"id":597},"introduction","Introduction",[600,601,602,603,607,608,611,612,615],"p",{},"Quand vous ouvrez un fichier de notes d'élèves, un export comptable ou un\nrelevé météo, vous tombez presque toujours sur la même structure : ",[604,605,606],"strong",{},"des\nlignes"," qui décrivent chacune une entité (un élève, une opération, un jour de\nmesure) et ",[604,609,610],{},"des colonnes"," qui décrivent chacune un attribut (nom, montant,\ntempérature). C'est la ",[604,613,614],{},"forme tabulaire"," — celle d'un cahier d'appel, d'un\nbulletin de notes ou d'une feuille de tableur — omniprésente parce qu'elle\nest simple à produire, à lire à l'œil nu et à transmettre.",[600,617,618,619,622,623,626,627,630],{},"Pour qu'un programme manipule ces données, il faut leur donner une\n",[604,620,621],{},"représentation en mémoire",". Ce premier cours vous présente le format\n",[604,624,625],{},"CSV"," (le plus universel des formats tabulaires textuels) et le modèle de\ndonnées que nous adopterons dans tout le chapitre : la ",[604,628,629],{},"liste de\ndictionnaires",".",[595,632,634],{"id":633},"vocabulaire-dune-table","Vocabulaire d'une table",[600,636,637],{},"Une table de données est définie par :",[639,640,641,654],"table",{},[642,643,644],"thead",{},[645,646,647,651],"tr",{},[648,649,650],"th",{},"Terme",[648,652,653],{},"Définition",[655,656,657,669,680,691,701],"tbody",{},[645,658,659,666],{},[660,661,662,665],"td",{},[604,663,664],{},"Ligne"," (ou enregistrement)",[660,667,668],{},"Une entité décrite, une unité d'information.",[645,670,671,677],{},[660,672,673,676],{},[604,674,675],{},"Colonne"," (ou champ)",[660,678,679],{},"Un attribut commun à toutes les lignes.",[645,681,682,688],{},[660,683,684,687],{},[604,685,686],{},"Descripteur"," (ou en-tête)",[660,689,690],{},"Le nom d'une colonne.",[645,692,693,698],{},[660,694,695],{},[604,696,697],{},"Cellule",[660,699,700],{},"L'intersection d'une ligne et d'une colonne — une valeur unique.",[645,702,703,708],{},[660,704,705],{},[604,706,707],{},"Domaine",[660,709,710],{},"L'ensemble des valeurs autorisées pour une colonne.",[712,713,714],"note",{},[600,715,716,717,720,721,724],{},"Les ",[604,718,719],{},"descripteurs sont partagés"," par toutes les lignes : chaque ligne\ncontient une valeur pour ",[604,722,723],{},"chacun"," des descripteurs. C'est ce qui permet de\nparler de table « rectangulaire ».",[600,726,727],{},"Voici une table d'exemple que nous utiliserons tout au long du chapitre — une\nliste d'élèves avec leur âge et leur classe :",[639,729,730,743],{},[642,731,732],{},[645,733,734,737,740],{},[648,735,736],{},"nom",[648,738,739],{},"age",[648,741,742],{},"classe",[655,744,745,756,767,776,785],{},[645,746,747,750,753],{},[660,748,749],{},"Alice",[660,751,752],{},"16",[660,754,755],{},"1G2",[645,757,758,761,764],{},[660,759,760],{},"Bob",[660,762,763],{},"17",[660,765,766],{},"1G3",[645,768,769,772,774],{},[660,770,771],{},"Chloé",[660,773,752],{},[660,775,755],{},[645,777,778,781,783],{},[660,779,780],{},"Dimitri",[660,782,763],{},[660,784,755],{},[645,786,787,790,792],{},[660,788,789],{},"Élodie",[660,791,752],{},[660,793,766],{},[595,795,797],{"id":796},"le-format-csv","Le format CSV",[600,799,800,802,803,807,808,811,812,815,816,819],{},[604,801,625],{}," signifie ",[804,805,806],"em",{},"Comma-Separated Values"," — valeurs séparées par des virgules.\nC'est un format ",[604,809,810],{},"texte"," ultra simple, lisible par n'importe quel éditeur,\nqu'un humain peut écrire à la main. La première ligne contient en général les\n",[604,813,814],{},"descripteurs",", les lignes suivantes les ",[604,817,818],{},"enregistrements"," :",[821,822,828],"pre",{"className":823,"code":825,"language":826,"meta":827},[824],"language-text","nom,age,classe\nAlice,16,1G2\nBob,17,1G3\nChloé,16,1G2\nDimitri,17,1G2\nÉlodie,16,1G3\n","text","",[829,830,825],"code",{"__ignoreMap":827},[832,833,834],"warning",{},[600,835,836,837,840,841,844,845,848],{},"Le séparateur peut varier (",[829,838,839],{},",",", ",[829,842,843],{},";",", tabulation). En France, beaucoup de\nfichiers Excel exportent en CSV avec le ",[604,846,847],{},"point-virgule"," comme séparateur,\nparce que la virgule sert déjà de séparateur décimal. Vérifiez toujours.",[600,850,851,854,855,858],{},[852,853],"bo-ref",{"code":589}," précise que la lecture d'une table tabulée ou CSV est une\n",[604,856,857],{},"capacité attendue"," du programme.",[860,861,865,871],"self-eval-qcm",{"correct":862,"explanation":863,"slug":864},"1","La première ligne contient les noms des colonnes — c'est l'en-tête.","tables-csv-c1",[866,867,868],"template",{"v-slot:question":827},[600,869,870],{},"Dans un CSV, à quoi sert la première ligne en général ?",[866,872,873],{"v-slot:choices":827},[874,875,876,880,883],"ul",{},[877,878,879],"li",{},"À déclarer le séparateur",[877,881,882],{},"À donner les descripteurs (noms de colonnes)",[877,884,885],{},"À indiquer le nombre de lignes",[595,887,889],{"id":888},"modèle-de-données-la-liste-de-dictionnaires","Modèle de données : la liste de dictionnaires",[600,891,892,893,896],{},"Pour représenter une table en mémoire, plusieurs choix existent. Nous\nadoptons la ",[604,894,895],{},"liste de dictionnaires"," pour tout le chapitre :",[821,898,902],{"className":899,"code":900,"language":901,"meta":827,"style":827},"language-python shiki shiki-themes github-light github-light github-dark","eleves = [\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n    {\"nom\": \"Élodie\",  \"age\": 16, \"classe\": \"1G3\"},\n]\n","python",[829,903,904,920,960,992,1022,1052,1083],{"__ignoreMap":827},[905,906,909,913,917],"span",{"class":907,"line":908},"line",1,[905,910,912],{"class":911},"sxrX7","eleves ",[905,914,916],{"class":915},"s8jYJ","=",[905,918,919],{"class":911}," [\n",[905,921,923,926,930,933,936,939,942,944,947,949,952,954,957],{"class":907,"line":922},2,[905,924,925],{"class":911},"    {",[905,927,929],{"class":928},"sIIMD","\"nom\"",[905,931,932],{"class":911},": ",[905,934,935],{"class":928},"\"Alice\"",[905,937,938],{"class":911},",   ",[905,940,941],{"class":928},"\"age\"",[905,943,932],{"class":911},[905,945,752],{"class":946},"sBjJW",[905,948,840],{"class":911},[905,950,951],{"class":928},"\"classe\"",[905,953,932],{"class":911},[905,955,956],{"class":928},"\"1G2\"",[905,958,959],{"class":911},"},\n",[905,961,963,965,967,969,972,975,977,979,981,983,985,987,990],{"class":907,"line":962},3,[905,964,925],{"class":911},[905,966,929],{"class":928},[905,968,932],{"class":911},[905,970,971],{"class":928},"\"Bob\"",[905,973,974],{"class":911},",     ",[905,976,941],{"class":928},[905,978,932],{"class":911},[905,980,763],{"class":946},[905,982,840],{"class":911},[905,984,951],{"class":928},[905,986,932],{"class":911},[905,988,989],{"class":928},"\"1G3\"",[905,991,959],{"class":911},[905,993,995,997,999,1001,1004,1006,1008,1010,1012,1014,1016,1018,1020],{"class":907,"line":994},4,[905,996,925],{"class":911},[905,998,929],{"class":928},[905,1000,932],{"class":911},[905,1002,1003],{"class":928},"\"Chloé\"",[905,1005,938],{"class":911},[905,1007,941],{"class":928},[905,1009,932],{"class":911},[905,1011,752],{"class":946},[905,1013,840],{"class":911},[905,1015,951],{"class":928},[905,1017,932],{"class":911},[905,1019,956],{"class":928},[905,1021,959],{"class":911},[905,1023,1025,1027,1029,1031,1034,1036,1038,1040,1042,1044,1046,1048,1050],{"class":907,"line":1024},5,[905,1026,925],{"class":911},[905,1028,929],{"class":928},[905,1030,932],{"class":911},[905,1032,1033],{"class":928},"\"Dimitri\"",[905,1035,840],{"class":911},[905,1037,941],{"class":928},[905,1039,932],{"class":911},[905,1041,763],{"class":946},[905,1043,840],{"class":911},[905,1045,951],{"class":928},[905,1047,932],{"class":911},[905,1049,956],{"class":928},[905,1051,959],{"class":911},[905,1053,1055,1057,1059,1061,1064,1067,1069,1071,1073,1075,1077,1079,1081],{"class":907,"line":1054},6,[905,1056,925],{"class":911},[905,1058,929],{"class":928},[905,1060,932],{"class":911},[905,1062,1063],{"class":928},"\"Élodie\"",[905,1065,1066],{"class":911},",  ",[905,1068,941],{"class":928},[905,1070,932],{"class":911},[905,1072,752],{"class":946},[905,1074,840],{"class":911},[905,1076,951],{"class":928},[905,1078,932],{"class":911},[905,1080,989],{"class":928},[905,1082,959],{"class":911},[905,1084,1086],{"class":907,"line":1085},7,[905,1087,1088],{"class":911},"]\n",[600,1090,1091,1092,1095,1096,1099,1100,1103],{},"Chaque ",[604,1093,1094],{},"ligne"," est un dictionnaire qui associe ",[604,1097,1098],{},"descripteur → valeur",".\nLa table entière est une ",[604,1101,1102],{},"liste"," de ces dictionnaires.",[1105,1106,1107],"tip",{},[600,1108,1109,1110,1113,1114,1117,1118,1121],{},"Pourquoi ce choix ? Parce qu'il est ",[604,1111,1112],{},"expressif"," : ",[829,1115,1116],{},"eleve[\"nom\"]"," se lit\ncomme une phrase. Et parce qu'il est ",[604,1119,1120],{},"stable"," : ajouter une colonne ne\nchange pas l'ordre d'accès aux autres valeurs.",[860,1123,1126,1131],{"correct":862,"explanation":1124,"slug":1125},"Chaque ligne contient les 3 descripteurs : nom, age, classe.","tables-csv-c2",[866,1127,1128],{"v-slot:question":827},[600,1129,1130],{},"Combien de clés a chaque dictionnaire de la liste eleves ?",[866,1132,1133],{"v-slot:choices":827},[874,1134,1135,1137,1140],{},[877,1136,862],{},[877,1138,1139],{},"3",[877,1141,1142],{},"5",[595,1144,1146,1147],{"id":1145},"lecture-dun-csv-avec-le-module-csv","Lecture d'un CSV avec le module ",[829,1148,1149],{},"csv",[600,1151,1152,1153,1155,1156,1159,1160,1163],{},"Python fournit en standard le module ",[829,1154,1149],{},". Sa classe ",[829,1157,1158],{},"DictReader"," lit\ndirectement un fichier CSV et produit, pour chaque ligne, un ",[604,1161,1162],{},"dictionnaire","\ndont les clés sont les en-têtes. C'est exactement le modèle que nous voulons.",[821,1165,1167],{"className":899,"code":1166,"language":901,"meta":827,"style":827},"import csv\n\nwith open(\"eleves.csv\", encoding=\"utf-8\") as f:\n    lecteur = csv.DictReader(f)\n    eleves = list(lecteur)\n\nprint(eleves[0])\n# {'nom': 'Alice', 'age': '16', 'classe': '1G2'}\n",[829,1168,1169,1177,1183,1217,1227,1240,1244,1258],{"__ignoreMap":827},[905,1170,1171,1174],{"class":907,"line":908},[905,1172,1173],{"class":915},"import",[905,1175,1176],{"class":911}," csv\n",[905,1178,1179],{"class":907,"line":922},[905,1180,1182],{"emptyLinePlaceholder":1181},true,"\n",[905,1184,1185,1188,1191,1194,1197,1199,1203,1205,1208,1211,1214],{"class":907,"line":962},[905,1186,1187],{"class":915},"with",[905,1189,1190],{"class":946}," open",[905,1192,1193],{"class":911},"(",[905,1195,1196],{"class":928},"\"eleves.csv\"",[905,1198,840],{"class":911},[905,1200,1202],{"class":1201},"sP4rz","encoding",[905,1204,916],{"class":915},[905,1206,1207],{"class":928},"\"utf-8\"",[905,1209,1210],{"class":911},") ",[905,1212,1213],{"class":915},"as",[905,1215,1216],{"class":911}," f:\n",[905,1218,1219,1222,1224],{"class":907,"line":994},[905,1220,1221],{"class":911},"    lecteur ",[905,1223,916],{"class":915},[905,1225,1226],{"class":911}," csv.DictReader(f)\n",[905,1228,1229,1232,1234,1237],{"class":907,"line":1024},[905,1230,1231],{"class":911},"    eleves ",[905,1233,916],{"class":915},[905,1235,1236],{"class":946}," list",[905,1238,1239],{"class":911},"(lecteur)\n",[905,1241,1242],{"class":907,"line":1054},[905,1243,1182],{"emptyLinePlaceholder":1181},[905,1245,1246,1249,1252,1255],{"class":907,"line":1085},[905,1247,1248],{"class":946},"print",[905,1250,1251],{"class":911},"(eleves[",[905,1253,1254],{"class":946},"0",[905,1256,1257],{"class":911},"])\n",[905,1259,1261],{"class":907,"line":1260},8,[905,1262,1264],{"class":1263},"sCsY4","# {'nom': 'Alice', 'age': '16', 'classe': '1G2'}\n",[832,1266,1267],{},[600,1268,1269,1270,1273,1274,1277,1278,1281,1282,1285,1286,630],{},"Toutes les valeurs lues par ",[829,1271,1272],{},"csv.DictReader"," sont des ",[604,1275,1276],{},"chaînes de\ncaractères",", même ",[829,1279,1280],{},"\"16\"",". Si une colonne est numérique, il faut convertir\nexplicitement avec ",[829,1283,1284],{},"int(...)"," ou ",[829,1287,1288],{},"float(...)",[600,1290,1291],{},"Pour convertir l'âge en entier au moment de la lecture :",[821,1293,1295],{"className":899,"code":1294,"language":901,"meta":827,"style":827},"import csv\n\nwith open(\"eleves.csv\", encoding=\"utf-8\") as f:\n    lecteur = csv.DictReader(f)\n    eleves = []\n    for ligne in lecteur:\n        ligne[\"age\"] = int(ligne[\"age\"])\n        eleves.append(ligne)\n\nprint(eleves[0])\n# {'nom': 'Alice', 'age': 16, 'classe': '1G2'}\n",[829,1296,1297,1303,1307,1331,1339,1348,1362,1384,1389,1394,1405],{"__ignoreMap":827},[905,1298,1299,1301],{"class":907,"line":908},[905,1300,1173],{"class":915},[905,1302,1176],{"class":911},[905,1304,1305],{"class":907,"line":922},[905,1306,1182],{"emptyLinePlaceholder":1181},[905,1308,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329],{"class":907,"line":962},[905,1310,1187],{"class":915},[905,1312,1190],{"class":946},[905,1314,1193],{"class":911},[905,1316,1196],{"class":928},[905,1318,840],{"class":911},[905,1320,1202],{"class":1201},[905,1322,916],{"class":915},[905,1324,1207],{"class":928},[905,1326,1210],{"class":911},[905,1328,1213],{"class":915},[905,1330,1216],{"class":911},[905,1332,1333,1335,1337],{"class":907,"line":994},[905,1334,1221],{"class":911},[905,1336,916],{"class":915},[905,1338,1226],{"class":911},[905,1340,1341,1343,1345],{"class":907,"line":1024},[905,1342,1231],{"class":911},[905,1344,916],{"class":915},[905,1346,1347],{"class":911}," []\n",[905,1349,1350,1353,1356,1359],{"class":907,"line":1054},[905,1351,1352],{"class":915},"    for",[905,1354,1355],{"class":911}," ligne ",[905,1357,1358],{"class":915},"in",[905,1360,1361],{"class":911}," lecteur:\n",[905,1363,1364,1367,1369,1372,1374,1377,1380,1382],{"class":907,"line":1085},[905,1365,1366],{"class":911},"        ligne[",[905,1368,941],{"class":928},[905,1370,1371],{"class":911},"] ",[905,1373,916],{"class":915},[905,1375,1376],{"class":946}," int",[905,1378,1379],{"class":911},"(ligne[",[905,1381,941],{"class":928},[905,1383,1257],{"class":911},[905,1385,1386],{"class":907,"line":1260},[905,1387,1388],{"class":911},"        eleves.append(ligne)\n",[905,1390,1392],{"class":907,"line":1391},9,[905,1393,1182],{"emptyLinePlaceholder":1181},[905,1395,1397,1399,1401,1403],{"class":907,"line":1396},10,[905,1398,1248],{"class":946},[905,1400,1251],{"class":911},[905,1402,1254],{"class":946},[905,1404,1257],{"class":911},[905,1406,1408],{"class":907,"line":1407},11,[905,1409,1410],{"class":1263},"# {'nom': 'Alice', 'age': 16, 'classe': '1G2'}\n",[595,1412,1414],{"id":1413},"accès-aux-données","Accès aux données",[600,1416,1417],{},"Une fois la table en mémoire, on l'exploite avec les opérations habituelles\nsur listes et dictionnaires :",[1419,1420,1421],"python-snippet",{},[821,1422,1424],{"className":899,"code":1423,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n]\n\n# Accès à une ligne par index\nprint(\"Première ligne :\", eleves[0])\n\n# Accès à une cellule\nprint(\"Nom du 2e élève :\", eleves[1][\"nom\"])\n\n# Parcours de toute la table\nfor eleve in eleves:\n    print(eleve[\"nom\"], \"a\", eleve[\"age\"], \"ans\")\n",[829,1425,1426,1434,1462,1490,1518,1522,1526,1531,1547,1551,1556,1576,1581,1587,1601],{"__ignoreMap":827},[905,1427,1428,1430,1432],{"class":907,"line":908},[905,1429,912],{"class":911},[905,1431,916],{"class":915},[905,1433,919],{"class":911},[905,1435,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460],{"class":907,"line":922},[905,1437,925],{"class":911},[905,1439,929],{"class":928},[905,1441,932],{"class":911},[905,1443,935],{"class":928},[905,1445,938],{"class":911},[905,1447,941],{"class":928},[905,1449,932],{"class":911},[905,1451,752],{"class":946},[905,1453,840],{"class":911},[905,1455,951],{"class":928},[905,1457,932],{"class":911},[905,1459,956],{"class":928},[905,1461,959],{"class":911},[905,1463,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488],{"class":907,"line":962},[905,1465,925],{"class":911},[905,1467,929],{"class":928},[905,1469,932],{"class":911},[905,1471,971],{"class":928},[905,1473,974],{"class":911},[905,1475,941],{"class":928},[905,1477,932],{"class":911},[905,1479,763],{"class":946},[905,1481,840],{"class":911},[905,1483,951],{"class":928},[905,1485,932],{"class":911},[905,1487,989],{"class":928},[905,1489,959],{"class":911},[905,1491,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516],{"class":907,"line":994},[905,1493,925],{"class":911},[905,1495,929],{"class":928},[905,1497,932],{"class":911},[905,1499,1003],{"class":928},[905,1501,938],{"class":911},[905,1503,941],{"class":928},[905,1505,932],{"class":911},[905,1507,752],{"class":946},[905,1509,840],{"class":911},[905,1511,951],{"class":928},[905,1513,932],{"class":911},[905,1515,956],{"class":928},[905,1517,959],{"class":911},[905,1519,1520],{"class":907,"line":1024},[905,1521,1088],{"class":911},[905,1523,1524],{"class":907,"line":1054},[905,1525,1182],{"emptyLinePlaceholder":1181},[905,1527,1528],{"class":907,"line":1085},[905,1529,1530],{"class":1263},"# Accès à une ligne par index\n",[905,1532,1533,1535,1537,1540,1543,1545],{"class":907,"line":1260},[905,1534,1248],{"class":946},[905,1536,1193],{"class":911},[905,1538,1539],{"class":928},"\"Première ligne :\"",[905,1541,1542],{"class":911},", eleves[",[905,1544,1254],{"class":946},[905,1546,1257],{"class":911},[905,1548,1549],{"class":907,"line":1391},[905,1550,1182],{"emptyLinePlaceholder":1181},[905,1552,1553],{"class":907,"line":1396},[905,1554,1555],{"class":1263},"# Accès à une cellule\n",[905,1557,1558,1560,1562,1565,1567,1569,1572,1574],{"class":907,"line":1407},[905,1559,1248],{"class":946},[905,1561,1193],{"class":911},[905,1563,1564],{"class":928},"\"Nom du 2e élève :\"",[905,1566,1542],{"class":911},[905,1568,862],{"class":946},[905,1570,1571],{"class":911},"][",[905,1573,929],{"class":928},[905,1575,1257],{"class":911},[905,1577,1579],{"class":907,"line":1578},12,[905,1580,1182],{"emptyLinePlaceholder":1181},[905,1582,1584],{"class":907,"line":1583},13,[905,1585,1586],{"class":1263},"# Parcours de toute la table\n",[905,1588,1590,1593,1596,1598],{"class":907,"line":1589},14,[905,1591,1592],{"class":915},"for",[905,1594,1595],{"class":911}," eleve ",[905,1597,1358],{"class":915},[905,1599,1600],{"class":911}," eleves:\n",[905,1602,1604,1607,1610,1612,1615,1618,1621,1623,1625,1628],{"class":907,"line":1603},15,[905,1605,1606],{"class":946},"    print",[905,1608,1609],{"class":911},"(eleve[",[905,1611,929],{"class":928},[905,1613,1614],{"class":911},"], ",[905,1616,1617],{"class":928},"\"a\"",[905,1619,1620],{"class":911},", eleve[",[905,1622,941],{"class":928},[905,1624,1614],{"class":911},[905,1626,1627],{"class":928},"\"ans\"",[905,1629,1630],{"class":911},")\n",[600,1632,1633],{},"Sortie attendue :",[821,1635,1638],{"className":1636,"code":1637,"language":826,"meta":827},[824],"Première ligne : {'nom': 'Alice', 'age': 16, 'classe': '1G2'}\nNom du 2e élève : Bob\nAlice a 16 ans\nBob a 17 ans\nChloé a 16 ans\n",[829,1639,1637],{"__ignoreMap":827},[595,1641,1643],{"id":1642},"cas-particuliers-et-pièges","Cas particuliers et pièges",[874,1645,1646,1663,1678,1691],{},[877,1647,1648,1651,1652,1655,1656,1659,1660,630],{},[604,1649,1650],{},"Encodage"," : un CSV produit sous Windows peut être en ",[829,1653,1654],{},"cp1252"," ou en\n",[829,1657,1658],{},"utf-8-sig"," (avec BOM). Si l'ouverture lève une erreur d'encodage, essayez\n",[829,1661,1662],{},"encoding=\"utf-8-sig\"",[877,1664,1665,1113,1668,1670,1671,1674,1675,630],{},[604,1666,1667],{},"Séparateur",[829,1669,1272],{}," accepte un paramètre ",[829,1672,1673],{},"delimiter"," que l'on\npasse lors de l'appel, par exemple ",[829,1676,1677],{},"csv.DictReader(f, delimiter=\";\")",[877,1679,1680,1683,1684,1687,1688,630],{},[604,1681,1682],{},"Valeurs vides"," : une cellule vide donne ",[829,1685,1686],{},"\"\"",", pas ",[829,1689,1690],{},"None",[877,1692,1693,1696,1697,1700],{},[604,1694,1695],{},"Espaces parasites"," : les exports Excel peuvent contenir des espaces en\nfin de cellule. Le ",[829,1698,1699],{},"strip()"," est votre ami.",[595,1702,1704],{"id":1703},"pour-aller-plus-loin","Pour aller plus loin",[600,1706,1707,1708,1710,1711,1714,1715,1718],{},"Le module ",[829,1709,1149],{}," propose aussi ",[829,1712,1713],{},"csv.DictWriter"," pour ",[604,1716,1717],{},"écrire"," une liste de\ndictionnaires dans un fichier CSV. Une fois que vous saurez filtrer ou trier\nune table (cours suivants), vous saurez aussi sauvegarder le résultat.",[1720,1721,1722],"style",{},"html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}html pre.shiki code .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":827,"searchDepth":922,"depth":922,"links":1724},[1725,1726,1727,1728,1729,1731,1732,1733],{"id":597,"depth":922,"text":598},{"id":633,"depth":922,"text":634},{"id":796,"depth":922,"text":797},{"id":888,"depth":922,"text":889},{"id":1145,"depth":922,"text":1730},"Lecture d'un CSV avec le module csv",{"id":1413,"depth":922,"text":1414},{"id":1642,"depth":922,"text":1643},{"id":1703,"depth":922,"text":1704},"Du tableau à la liste de dictionnaires — lecture d'un fichier CSV en Python vanilla.",null,"md",{},[1739,1743],{"slug":864,"kind":1740,"question":870,"choices":1741,"correct":862,"multi":1742,"explanation":863},"qcm",[879,882,885],false,{"slug":1125,"kind":1740,"question":1130,"choices":1744,"correct":862,"multi":1742,"explanation":1124},[862,1139,1142],{"title":311,"description":1734},"dtBH02oNeQHIMa1kMU513vaezZvBaPsDHxsYRQtervk",{"id":1748,"title":315,"bo":1749,"body":1750,"description":3556,"eval":1735,"extension":1736,"labo":1735,"meta":3557,"navigation":1181,"path":316,"quizzes":3558,"readingTime":908,"seo":3566,"stem":317,"tp":1735,"__hash__":3567},"cours\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche.md",[590],{"type":592,"value":1751,"toc":3538},[1752,1754,1769,1778,1782,1789,1872,2226,2230,2235,2469,2476,2489,2510,2514,2521,2755,2758,2764,2768,2774,2850,2862,2866,2889,2896,2995,3001,3073,3079,3138,3175,3179,3186,3349,3361,3363,3418,3420,3535],[595,1753,598],{"id":597},[600,1755,1756,1757,1760,1761,1764,1765,1768],{},"Une table de données ne sert à rien si vous ne savez pas en ",[604,1758,1759],{},"extraire"," ce\nqui vous intéresse. La question typique est : « parmi tous ces élèves,\nlesquels sont en classe 1G2 ? » ou « lesquels ont au moins 17 ans ? » C'est\nl'opération de ",[604,1762,1763],{},"recherche"," — ou ",[604,1766,1767],{},"filtrage"," quand on garde toutes les\nlignes correspondantes plutôt qu'une seule.",[600,1770,1771,1772,1774,1775,630],{},"Ce cours vous montre comment réaliser ces sélections en Python sur une table\nreprésentée comme liste de dictionnaires (cf. cours précédent).\n",[852,1773],{"code":590}," formalise cette capacité : ",[804,1776,1777],{},"rechercher les lignes d'une\ntable vérifiant des critères exprimés en logique propositionnelle",[595,1779,1781],{"id":1780},"le-principe-parcours-linéaire","Le principe : parcours linéaire",[600,1783,1784,1785,1788],{},"La méthode élémentaire est la ",[604,1786,1787],{},"recherche linéaire"," : on parcourt la table\nligne par ligne, et pour chaque ligne on évalue le critère. Si le critère est\nvrai, la ligne est conservée. Sinon, elle est ignorée. C'est la stratégie\nqu'on adopte naturellement face à un trousseau de clés sans étiquette : on\nessaie chaque clé jusqu'à trouver la bonne.",[712,1790,1791],{},[600,1792,1793,1794,1797,1798,1801,1802,630],{},"Sur une table non triée, c'est la ",[604,1795,1796],{},"seule"," méthode garantie. Tant qu'il\nn'existe pas d'ordre exploitable, il faut bien regarder chaque ligne. On dit\nque la complexité est ",[604,1799,1800],{},"linéaire"," en le nombre de lignes : ",[905,1803,1806,1840],{"className":1804},[1805],"katex",[905,1807,1810],{"className":1808},[1809],"katex-mathml",[1811,1812,1814],"math",{"xmlns":1813},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[1815,1816,1817,1835],"semantics",{},[1818,1819,1820,1825,1829,1832],"mrow",{},[1821,1822,1824],"mi",{"mathvariant":1823},"script","O",[1826,1827,1193],"mo",{"stretchy":1828},"false",[1821,1830,1831],{},"n",[1826,1833,1834],{"stretchy":1828},")",[1836,1837,1839],"annotation",{"encoding":1838},"application\u002Fx-tex","\\mathcal{O}(n)",[905,1841,1845],{"className":1842,"ariaHidden":1844},[1843],"katex-html","true",[905,1846,1849,1854,1860,1864,1868],{"className":1847},[1848],"base",[905,1850],{"className":1851,"style":1853},[1852],"strut","height:1em;vertical-align:-0.25em;",[905,1855,1824],{"className":1856,"style":1859},[1857,1858],"mord","mathcal","margin-right:0.0278em;",[905,1861,1193],{"className":1862},[1863],"mopen",[905,1865,1831],{"className":1866},[1857,1867],"mathnormal",[905,1869,1834],{"className":1870},[1871],"mclose",[712,1873,1874],{},[600,1875,1876,1924,1925,1928,1929,1972,1973,2002,2003,2093,2094,2153,2154,2218,2219,2222,2223,630],{},[604,1877,1878,1879,630],{},"À propos de la notation ",[905,1880,1882,1903],{"className":1881},[1805],[905,1883,1885],{"className":1884},[1809],[1811,1886,1887],{"xmlns":1813},[1815,1888,1889,1900],{},[1818,1890,1891,1893,1895,1898],{},[1821,1892,1824],{"mathvariant":1823},[1826,1894,1193],{"stretchy":1828},[1826,1896,1897],{},"⋅",[1826,1899,1834],{"stretchy":1828},[1836,1901,1902],{"encoding":1838},"\\mathcal{O}(\\cdot)",[905,1904,1906],{"className":1905,"ariaHidden":1844},[1843],[905,1907,1909,1912,1915,1918,1921],{"className":1908},[1848],[905,1910],{"className":1911,"style":1853},[1852],[905,1913,1824],{"className":1914,"style":1859},[1857,1858],[905,1916,1193],{"className":1917},[1863],[905,1919,1897],{"className":1920},[1857],[905,1922,1834],{"className":1923},[1871]," Elle exprime un ",[604,1926,1927],{},"ordre\nde grandeur"," du nombre d'opérations en fonction de la taille des données :\n",[905,1930,1932,1951],{"className":1931},[1805],[905,1933,1935],{"className":1934},[1809],[1811,1936,1937],{"xmlns":1813},[1815,1938,1939,1949],{},[1818,1940,1941,1943,1945,1947],{},[1821,1942,1824],{"mathvariant":1823},[1826,1944,1193],{"stretchy":1828},[1821,1946,1831],{},[1826,1948,1834],{"stretchy":1828},[1836,1950,1839],{"encoding":1838},[905,1952,1954],{"className":1953,"ariaHidden":1844},[1843],[905,1955,1957,1960,1963,1966,1969],{"className":1956},[1848],[905,1958],{"className":1959,"style":1853},[1852],[905,1961,1824],{"className":1962,"style":1859},[1857,1858],[905,1964,1193],{"className":1965},[1863],[905,1967,1831],{"className":1968},[1857,1867],[905,1970,1834],{"className":1971},[1871]," se lit « proportionnel à ",[905,1974,1976,1989],{"className":1975},[1805],[905,1977,1979],{"className":1978},[1809],[1811,1980,1981],{"xmlns":1813},[1815,1982,1983,1987],{},[1818,1984,1985],{},[1821,1986,1831],{},[1836,1988,1831],{"encoding":1838},[905,1990,1992],{"className":1991,"ariaHidden":1844},[1843],[905,1993,1995,1999],{"className":1994},[1848],[905,1996],{"className":1997,"style":1998},[1852],"height:0.4306em;",[905,2000,1831],{"className":2001},[1857,1867]," » (doubler les données double\nle temps), ",[905,2004,2006,2033],{"className":2005},[1805],[905,2007,2009],{"className":2008},[1809],[1811,2010,2011],{"xmlns":1813},[1815,2012,2013,2030],{},[1818,2014,2015,2017,2019,2028],{},[1821,2016,1824],{"mathvariant":1823},[1826,2018,1193],{"stretchy":1828},[2020,2021,2022,2024],"msup",{},[1821,2023,1831],{},[2025,2026,2027],"mn",{},"2",[1826,2029,1834],{"stretchy":1828},[1836,2031,2032],{"encoding":1838},"\\mathcal{O}(n^2)",[905,2034,2036],{"className":2035,"ariaHidden":1844},[1843],[905,2037,2039,2043,2046,2049,2090],{"className":2038},[1848],[905,2040],{"className":2041,"style":2042},[1852],"height:1.0641em;vertical-align:-0.25em;",[905,2044,1824],{"className":2045,"style":1859},[1857,1858],[905,2047,1193],{"className":2048},[1863],[905,2050,2052,2055],{"className":2051},[1857],[905,2053,1831],{"className":2054},[1857,1867],[905,2056,2059],{"className":2057},[2058],"msupsub",[905,2060,2063],{"className":2061},[2062],"vlist-t",[905,2064,2067],{"className":2065},[2066],"vlist-r",[905,2068,2072],{"className":2069,"style":2071},[2070],"vlist","height:0.8141em;",[905,2073,2075,2080],{"style":2074},"top:-3.063em;margin-right:0.05em;",[905,2076],{"className":2077,"style":2079},[2078],"pstrut","height:2.7em;",[905,2081,2087],{"className":2082},[2083,2084,2085,2086],"sizing","reset-size6","size3","mtight",[905,2088,2027],{"className":2089},[1857,2086],[905,2091,1834],{"className":2092},[1871]," « proportionnel à ",[905,2095,2097,2115],{"className":2096},[1805],[905,2098,2100],{"className":2099},[1809],[1811,2101,2102],{"xmlns":1813},[1815,2103,2104,2112],{},[1818,2105,2106],{},[2020,2107,2108,2110],{},[1821,2109,1831],{},[2025,2111,2027],{},[1836,2113,2114],{"encoding":1838},"n^2",[905,2116,2118],{"className":2117,"ariaHidden":1844},[1843],[905,2119,2121,2124],{"className":2120},[1848],[905,2122],{"className":2123,"style":2071},[1852],[905,2125,2127,2130],{"className":2126},[1857],[905,2128,1831],{"className":2129},[1857,1867],[905,2131,2133],{"className":2132},[2058],[905,2134,2136],{"className":2135},[2062],[905,2137,2139],{"className":2138},[2066],[905,2140,2142],{"className":2141,"style":2071},[2070],[905,2143,2144,2147],{"style":2074},[905,2145],{"className":2146,"style":2079},[2078],[905,2148,2150],{"className":2149},[2083,2084,2085,2086],[905,2151,2027],{"className":2152},[1857,2086]," », ",[905,2155,2157,2183],{"className":2156},[1805],[905,2158,2160],{"className":2159},[1809],[1811,2161,2162],{"xmlns":1813},[1815,2163,2164,2180],{},[1818,2165,2166,2168,2170,2173,2176,2178],{},[1821,2167,1824],{"mathvariant":1823},[1826,2169,1193],{"stretchy":1828},[1821,2171,2172],{},"log",[1826,2174,2175],{},"⁡",[1821,2177,1831],{},[1826,2179,1834],{"stretchy":1828},[1836,2181,2182],{"encoding":1838},"\\mathcal{O}(\\log n)",[905,2184,2186],{"className":2185,"ariaHidden":1844},[1843],[905,2187,2189,2192,2195,2198,2207,2212,2215],{"className":2188},[1848],[905,2190],{"className":2191,"style":1853},[1852],[905,2193,1824],{"className":2194,"style":1859},[1857,1858],[905,2196,1193],{"className":2197},[1863],[905,2199,2202,2203],{"className":2200},[2201],"mop","lo",[905,2204,2206],{"style":2205},"margin-right:0.0139em;","g",[905,2208],{"className":2209,"style":2211},[2210],"mspace","margin-right:0.1667em;",[905,2213,1831],{"className":2214},[1857,1867],[905,2216,1834],{"className":2217},[1871],"\n« croît très lentement ». La notation est étudiée en détail au chapitre\n",[604,2220,2221],{},"PH — Algorithmique"," ; ici, retenez seulement l'",[604,2224,2225],{},"intuition de coût",[595,2227,2229],{"id":2228},"premier-exemple-trouver-une-ligne-unique","Premier exemple : trouver une ligne unique",[600,2231,2232,2233,819],{},"Cherchons l'élève dont le nom est ",[829,2234,1003],{},[821,2236,2238],{"className":899,"code":2237,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n    {\"nom\": \"Élodie\",  \"age\": 16, \"classe\": \"1G3\"},\n]\n\nresultat = None\nfor eleve in eleves:\n    if eleve[\"nom\"] == \"Chloé\":\n        resultat = eleve\n        break\n\nprint(resultat)\n# {'nom': 'Chloé', 'age': 16, 'classe': '1G2'}\n",[829,2239,2240,2248,2276,2304,2332,2360,2388,2392,2396,2406,2416,2437,2447,2452,2456,2463],{"__ignoreMap":827},[905,2241,2242,2244,2246],{"class":907,"line":908},[905,2243,912],{"class":911},[905,2245,916],{"class":915},[905,2247,919],{"class":911},[905,2249,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274],{"class":907,"line":922},[905,2251,925],{"class":911},[905,2253,929],{"class":928},[905,2255,932],{"class":911},[905,2257,935],{"class":928},[905,2259,938],{"class":911},[905,2261,941],{"class":928},[905,2263,932],{"class":911},[905,2265,752],{"class":946},[905,2267,840],{"class":911},[905,2269,951],{"class":928},[905,2271,932],{"class":911},[905,2273,956],{"class":928},[905,2275,959],{"class":911},[905,2277,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302],{"class":907,"line":962},[905,2279,925],{"class":911},[905,2281,929],{"class":928},[905,2283,932],{"class":911},[905,2285,971],{"class":928},[905,2287,974],{"class":911},[905,2289,941],{"class":928},[905,2291,932],{"class":911},[905,2293,763],{"class":946},[905,2295,840],{"class":911},[905,2297,951],{"class":928},[905,2299,932],{"class":911},[905,2301,989],{"class":928},[905,2303,959],{"class":911},[905,2305,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330],{"class":907,"line":994},[905,2307,925],{"class":911},[905,2309,929],{"class":928},[905,2311,932],{"class":911},[905,2313,1003],{"class":928},[905,2315,938],{"class":911},[905,2317,941],{"class":928},[905,2319,932],{"class":911},[905,2321,752],{"class":946},[905,2323,840],{"class":911},[905,2325,951],{"class":928},[905,2327,932],{"class":911},[905,2329,956],{"class":928},[905,2331,959],{"class":911},[905,2333,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358],{"class":907,"line":1024},[905,2335,925],{"class":911},[905,2337,929],{"class":928},[905,2339,932],{"class":911},[905,2341,1033],{"class":928},[905,2343,840],{"class":911},[905,2345,941],{"class":928},[905,2347,932],{"class":911},[905,2349,763],{"class":946},[905,2351,840],{"class":911},[905,2353,951],{"class":928},[905,2355,932],{"class":911},[905,2357,956],{"class":928},[905,2359,959],{"class":911},[905,2361,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386],{"class":907,"line":1054},[905,2363,925],{"class":911},[905,2365,929],{"class":928},[905,2367,932],{"class":911},[905,2369,1063],{"class":928},[905,2371,1066],{"class":911},[905,2373,941],{"class":928},[905,2375,932],{"class":911},[905,2377,752],{"class":946},[905,2379,840],{"class":911},[905,2381,951],{"class":928},[905,2383,932],{"class":911},[905,2385,989],{"class":928},[905,2387,959],{"class":911},[905,2389,2390],{"class":907,"line":1085},[905,2391,1088],{"class":911},[905,2393,2394],{"class":907,"line":1260},[905,2395,1182],{"emptyLinePlaceholder":1181},[905,2397,2398,2401,2403],{"class":907,"line":1391},[905,2399,2400],{"class":911},"resultat ",[905,2402,916],{"class":915},[905,2404,2405],{"class":946}," None\n",[905,2407,2408,2410,2412,2414],{"class":907,"line":1396},[905,2409,1592],{"class":915},[905,2411,1595],{"class":911},[905,2413,1358],{"class":915},[905,2415,1600],{"class":911},[905,2417,2418,2421,2424,2426,2428,2431,2434],{"class":907,"line":1407},[905,2419,2420],{"class":915},"    if",[905,2422,2423],{"class":911}," eleve[",[905,2425,929],{"class":928},[905,2427,1371],{"class":911},[905,2429,2430],{"class":915},"==",[905,2432,2433],{"class":928}," \"Chloé\"",[905,2435,2436],{"class":911},":\n",[905,2438,2439,2442,2444],{"class":907,"line":1578},[905,2440,2441],{"class":911},"        resultat ",[905,2443,916],{"class":915},[905,2445,2446],{"class":911}," eleve\n",[905,2448,2449],{"class":907,"line":1583},[905,2450,2451],{"class":915},"        break\n",[905,2453,2454],{"class":907,"line":1589},[905,2455,1182],{"emptyLinePlaceholder":1181},[905,2457,2458,2460],{"class":907,"line":1603},[905,2459,1248],{"class":946},[905,2461,2462],{"class":911},"(resultat)\n",[905,2464,2466],{"class":907,"line":2465},16,[905,2467,2468],{"class":1263},"# {'nom': 'Chloé', 'age': 16, 'classe': '1G2'}\n",[600,2470,2471,2472,2475],{},"Le ",[829,2473,2474],{},"break"," permet de s'arrêter dès qu'on a trouvé — inutile de continuer si\nle nom est unique.",[832,2477,2478],{},[600,2479,2480,2481,2484,2485,2488],{},"Si plusieurs lignes correspondent, ce code n'en retourne ",[604,2482,2483],{},"qu'une seule","\n(la première trouvée). Pour récupérer toutes les lignes correspondantes,\nil faut ",[604,2486,2487],{},"filtrer"," (section suivante).",[860,2490,2493,2498],{"correct":862,"explanation":2491,"slug":2492},"La variable resultat est initialisée à None et le if ne s'exécute jamais.","recherche-c1",[866,2494,2495],{"v-slot:question":827},[600,2496,2497],{},"Que renvoie ce code si aucune ligne ne correspond ?",[866,2499,2500],{"v-slot:choices":827},[874,2501,2502,2505,2507],{},[877,2503,2504],{},"Une erreur",[877,2506,1690],{},[877,2508,2509],{},"Une liste vide",[595,2511,2513],{"id":2512},"filtrer-toutes-les-lignes-vérifiant-un-critère","Filtrer : toutes les lignes vérifiant un critère",[600,2515,2516,2517,2520],{},"Pour récupérer ",[604,2518,2519],{},"toutes"," les lignes correspondantes, on accumule dans une\nnouvelle liste :",[1419,2522,2523],{},[821,2524,2526],{"className":899,"code":2525,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n    {\"nom\": \"Élodie\",  \"age\": 16, \"classe\": \"1G3\"},\n]\n\n# Toutes les lignes en classe 1G2\nen_1g2 = []\nfor eleve in eleves:\n    if eleve[\"classe\"] == \"1G2\":\n        en_1g2.append(eleve)\n\nfor eleve in en_1g2:\n    print(eleve[\"nom\"])\n",[829,2527,2528,2536,2564,2592,2620,2648,2676,2680,2684,2689,2698,2708,2725,2730,2734,2745],{"__ignoreMap":827},[905,2529,2530,2532,2534],{"class":907,"line":908},[905,2531,912],{"class":911},[905,2533,916],{"class":915},[905,2535,919],{"class":911},[905,2537,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562],{"class":907,"line":922},[905,2539,925],{"class":911},[905,2541,929],{"class":928},[905,2543,932],{"class":911},[905,2545,935],{"class":928},[905,2547,938],{"class":911},[905,2549,941],{"class":928},[905,2551,932],{"class":911},[905,2553,752],{"class":946},[905,2555,840],{"class":911},[905,2557,951],{"class":928},[905,2559,932],{"class":911},[905,2561,956],{"class":928},[905,2563,959],{"class":911},[905,2565,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590],{"class":907,"line":962},[905,2567,925],{"class":911},[905,2569,929],{"class":928},[905,2571,932],{"class":911},[905,2573,971],{"class":928},[905,2575,974],{"class":911},[905,2577,941],{"class":928},[905,2579,932],{"class":911},[905,2581,763],{"class":946},[905,2583,840],{"class":911},[905,2585,951],{"class":928},[905,2587,932],{"class":911},[905,2589,989],{"class":928},[905,2591,959],{"class":911},[905,2593,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618],{"class":907,"line":994},[905,2595,925],{"class":911},[905,2597,929],{"class":928},[905,2599,932],{"class":911},[905,2601,1003],{"class":928},[905,2603,938],{"class":911},[905,2605,941],{"class":928},[905,2607,932],{"class":911},[905,2609,752],{"class":946},[905,2611,840],{"class":911},[905,2613,951],{"class":928},[905,2615,932],{"class":911},[905,2617,956],{"class":928},[905,2619,959],{"class":911},[905,2621,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646],{"class":907,"line":1024},[905,2623,925],{"class":911},[905,2625,929],{"class":928},[905,2627,932],{"class":911},[905,2629,1033],{"class":928},[905,2631,840],{"class":911},[905,2633,941],{"class":928},[905,2635,932],{"class":911},[905,2637,763],{"class":946},[905,2639,840],{"class":911},[905,2641,951],{"class":928},[905,2643,932],{"class":911},[905,2645,956],{"class":928},[905,2647,959],{"class":911},[905,2649,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674],{"class":907,"line":1054},[905,2651,925],{"class":911},[905,2653,929],{"class":928},[905,2655,932],{"class":911},[905,2657,1063],{"class":928},[905,2659,1066],{"class":911},[905,2661,941],{"class":928},[905,2663,932],{"class":911},[905,2665,752],{"class":946},[905,2667,840],{"class":911},[905,2669,951],{"class":928},[905,2671,932],{"class":911},[905,2673,989],{"class":928},[905,2675,959],{"class":911},[905,2677,2678],{"class":907,"line":1085},[905,2679,1088],{"class":911},[905,2681,2682],{"class":907,"line":1260},[905,2683,1182],{"emptyLinePlaceholder":1181},[905,2685,2686],{"class":907,"line":1391},[905,2687,2688],{"class":1263},"# Toutes les lignes en classe 1G2\n",[905,2690,2691,2694,2696],{"class":907,"line":1396},[905,2692,2693],{"class":911},"en_1g2 ",[905,2695,916],{"class":915},[905,2697,1347],{"class":911},[905,2699,2700,2702,2704,2706],{"class":907,"line":1407},[905,2701,1592],{"class":915},[905,2703,1595],{"class":911},[905,2705,1358],{"class":915},[905,2707,1600],{"class":911},[905,2709,2710,2712,2714,2716,2718,2720,2723],{"class":907,"line":1578},[905,2711,2420],{"class":915},[905,2713,2423],{"class":911},[905,2715,951],{"class":928},[905,2717,1371],{"class":911},[905,2719,2430],{"class":915},[905,2721,2722],{"class":928}," \"1G2\"",[905,2724,2436],{"class":911},[905,2726,2727],{"class":907,"line":1583},[905,2728,2729],{"class":911},"        en_1g2.append(eleve)\n",[905,2731,2732],{"class":907,"line":1589},[905,2733,1182],{"emptyLinePlaceholder":1181},[905,2735,2736,2738,2740,2742],{"class":907,"line":1603},[905,2737,1592],{"class":915},[905,2739,1595],{"class":911},[905,2741,1358],{"class":915},[905,2743,2744],{"class":911}," en_1g2:\n",[905,2746,2747,2749,2751,2753],{"class":907,"line":2465},[905,2748,1606],{"class":946},[905,2750,1609],{"class":911},[905,2752,929],{"class":928},[905,2754,1257],{"class":911},[600,2756,2757],{},"Sortie :",[821,2759,2762],{"className":2760,"code":2761,"language":826,"meta":827},[824],"Alice\nChloé\nDimitri\n",[829,2763,2761],{"__ignoreMap":827},[595,2765,2767],{"id":2766},"version-concise-avec-une-compréhension-de-liste","Version concise avec une compréhension de liste",[600,2769,2770,2771,819],{},"Le même filtrage s'écrit en une ligne avec une ",[604,2772,2773],{},"compréhension de liste",[821,2775,2777],{"className":899,"code":2776,"language":901,"meta":827,"style":827},"en_1g2 = [eleve for eleve in eleves if eleve[\"classe\"] == \"1G2\"]\n\nprint(len(en_1g2))  # 3\nprint(en_1g2[0][\"nom\"])  # Alice\n",[829,2778,2779,2812,2816,2831],{"__ignoreMap":827},[905,2780,2781,2783,2785,2788,2790,2792,2794,2797,2800,2802,2804,2806,2808,2810],{"class":907,"line":908},[905,2782,2693],{"class":911},[905,2784,916],{"class":915},[905,2786,2787],{"class":911}," [eleve ",[905,2789,1592],{"class":915},[905,2791,1595],{"class":911},[905,2793,1358],{"class":915},[905,2795,2796],{"class":911}," eleves ",[905,2798,2799],{"class":915},"if",[905,2801,2423],{"class":911},[905,2803,951],{"class":928},[905,2805,1371],{"class":911},[905,2807,2430],{"class":915},[905,2809,2722],{"class":928},[905,2811,1088],{"class":911},[905,2813,2814],{"class":907,"line":922},[905,2815,1182],{"emptyLinePlaceholder":1181},[905,2817,2818,2820,2822,2825,2828],{"class":907,"line":962},[905,2819,1248],{"class":946},[905,2821,1193],{"class":911},[905,2823,2824],{"class":946},"len",[905,2826,2827],{"class":911},"(en_1g2))  ",[905,2829,2830],{"class":1263},"# 3\n",[905,2832,2833,2835,2838,2840,2842,2844,2847],{"class":907,"line":994},[905,2834,1248],{"class":946},[905,2836,2837],{"class":911},"(en_1g2[",[905,2839,1254],{"class":946},[905,2841,1571],{"class":911},[905,2843,929],{"class":928},[905,2845,2846],{"class":911},"])  ",[905,2848,2849],{"class":1263},"# Alice\n",[1105,2851,2852],{},[600,2853,2854,2855,2858,2859,2861],{},"Les deux écritures sont ",[604,2856,2857],{},"équivalentes",". Préférez la compréhension de liste\nquand le critère tient sur une ligne — elle est plus expressive. Préférez\nla boucle ",[829,2860,1592],{}," étendue quand vous avez plusieurs traitements à faire au sein\nde la même itération.",[595,2863,2865],{"id":2864},"critères-composés-logique-propositionnelle","Critères composés (logique propositionnelle)",[600,2867,2868,2869,840,2874,2879,2880,2885,2886,630],{},"Un critère peut combiner plusieurs conditions avec les opérateurs logiques\n",[604,2870,2871],{},[829,2872,2873],{},"and",[604,2875,2876],{},[829,2877,2878],{},"or"," et ",[604,2881,2882],{},[829,2883,2884],{},"not",". C'est ce qu'on appelle de la ",[604,2887,2888],{},"logique\npropositionnelle",[2890,2891,2893,2895],"h3",{"id":2892},"and-deux-conditions-doivent-être-vraies",[829,2894,2873],{}," — deux conditions doivent être vraies",[821,2897,2899],{"className":899,"code":2898,"language":901,"meta":827,"style":827},"# Élèves de 1G2 ET ayant 16 ans\nselection = [e for e in eleves if e[\"classe\"] == \"1G2\" and e[\"age\"] == 16]\n\nfor e in selection:\n    print(e[\"nom\"], e[\"age\"])\n# Alice 16\n# Chloé 16\n",[829,2900,2901,2906,2954,2958,2969,2985,2990],{"__ignoreMap":827},[905,2902,2903],{"class":907,"line":908},[905,2904,2905],{"class":1263},"# Élèves de 1G2 ET ayant 16 ans\n",[905,2907,2908,2911,2913,2916,2918,2921,2923,2925,2927,2930,2932,2934,2936,2938,2941,2943,2945,2947,2949,2952],{"class":907,"line":922},[905,2909,2910],{"class":911},"selection ",[905,2912,916],{"class":915},[905,2914,2915],{"class":911}," [e ",[905,2917,1592],{"class":915},[905,2919,2920],{"class":911}," e ",[905,2922,1358],{"class":915},[905,2924,2796],{"class":911},[905,2926,2799],{"class":915},[905,2928,2929],{"class":911}," e[",[905,2931,951],{"class":928},[905,2933,1371],{"class":911},[905,2935,2430],{"class":915},[905,2937,2722],{"class":928},[905,2939,2940],{"class":915}," and",[905,2942,2929],{"class":911},[905,2944,941],{"class":928},[905,2946,1371],{"class":911},[905,2948,2430],{"class":915},[905,2950,2951],{"class":946}," 16",[905,2953,1088],{"class":911},[905,2955,2956],{"class":907,"line":962},[905,2957,1182],{"emptyLinePlaceholder":1181},[905,2959,2960,2962,2964,2966],{"class":907,"line":994},[905,2961,1592],{"class":915},[905,2963,2920],{"class":911},[905,2965,1358],{"class":915},[905,2967,2968],{"class":911}," selection:\n",[905,2970,2971,2973,2976,2978,2981,2983],{"class":907,"line":1024},[905,2972,1606],{"class":946},[905,2974,2975],{"class":911},"(e[",[905,2977,929],{"class":928},[905,2979,2980],{"class":911},"], e[",[905,2982,941],{"class":928},[905,2984,1257],{"class":911},[905,2986,2987],{"class":907,"line":1054},[905,2988,2989],{"class":1263},"# Alice 16\n",[905,2991,2992],{"class":907,"line":1085},[905,2993,2994],{"class":1263},"# Chloé 16\n",[2890,2996,2998,3000],{"id":2997},"or-au-moins-une-condition-doit-être-vraie",[829,2999,2878],{}," — au moins une condition doit être vraie",[821,3002,3004],{"className":899,"code":3003,"language":901,"meta":827,"style":827},"# Élèves de 1G2 OU 1G3 (toutes les classes Première Générale)\nselection = [e for e in eleves if e[\"classe\"] == \"1G2\" or e[\"classe\"] == \"1G3\"]\n\nprint(len(selection))  # 5\n",[829,3005,3006,3011,3055,3059],{"__ignoreMap":827},[905,3007,3008],{"class":907,"line":908},[905,3009,3010],{"class":1263},"# Élèves de 1G2 OU 1G3 (toutes les classes Première Générale)\n",[905,3012,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3042,3044,3046,3048,3050,3053],{"class":907,"line":922},[905,3014,2910],{"class":911},[905,3016,916],{"class":915},[905,3018,2915],{"class":911},[905,3020,1592],{"class":915},[905,3022,2920],{"class":911},[905,3024,1358],{"class":915},[905,3026,2796],{"class":911},[905,3028,2799],{"class":915},[905,3030,2929],{"class":911},[905,3032,951],{"class":928},[905,3034,1371],{"class":911},[905,3036,2430],{"class":915},[905,3038,2722],{"class":928},[905,3040,3041],{"class":915}," or",[905,3043,2929],{"class":911},[905,3045,951],{"class":928},[905,3047,1371],{"class":911},[905,3049,2430],{"class":915},[905,3051,3052],{"class":928}," \"1G3\"",[905,3054,1088],{"class":911},[905,3056,3057],{"class":907,"line":962},[905,3058,1182],{"emptyLinePlaceholder":1181},[905,3060,3061,3063,3065,3067,3070],{"class":907,"line":994},[905,3062,1248],{"class":946},[905,3064,1193],{"class":911},[905,3066,2824],{"class":946},[905,3068,3069],{"class":911},"(selection))  ",[905,3071,3072],{"class":1263},"# 5\n",[2890,3074,3076,3078],{"id":3075},"not-inverser-une-condition",[829,3077,2884],{}," — inverser une condition",[821,3080,3082],{"className":899,"code":3081,"language":901,"meta":827,"style":827},"# Tous les élèves SAUF ceux de 1G3\nselection = [e for e in eleves if not e[\"classe\"] == \"1G3\"]\n\nprint(len(selection))  # 3\n",[829,3083,3084,3089,3122,3126],{"__ignoreMap":827},[905,3085,3086],{"class":907,"line":908},[905,3087,3088],{"class":1263},"# Tous les élèves SAUF ceux de 1G3\n",[905,3090,3091,3093,3095,3097,3099,3101,3103,3105,3107,3110,3112,3114,3116,3118,3120],{"class":907,"line":922},[905,3092,2910],{"class":911},[905,3094,916],{"class":915},[905,3096,2915],{"class":911},[905,3098,1592],{"class":915},[905,3100,2920],{"class":911},[905,3102,1358],{"class":915},[905,3104,2796],{"class":911},[905,3106,2799],{"class":915},[905,3108,3109],{"class":915}," not",[905,3111,2929],{"class":911},[905,3113,951],{"class":928},[905,3115,1371],{"class":911},[905,3117,2430],{"class":915},[905,3119,3052],{"class":928},[905,3121,1088],{"class":911},[905,3123,3124],{"class":907,"line":962},[905,3125,1182],{"emptyLinePlaceholder":1181},[905,3127,3128,3130,3132,3134,3136],{"class":907,"line":994},[905,3129,1248],{"class":946},[905,3131,1193],{"class":911},[905,3133,2824],{"class":946},[905,3135,3069],{"class":911},[905,3137,2830],{"class":1263},[860,3139,3142,3147],{"correct":862,"explanation":3140,"slug":3141},"Il faut écrire les clés entre guillemets et combiner avec and pour cumuler les deux conditions.","recherche-c2",[866,3143,3144],{"v-slot:question":827},[600,3145,3146],{},"Quelle expression sélectionne les élèves majeurs de 1G2 ?",[866,3148,3149],{"v-slot:choices":827},[874,3150,3151,3160,3168],{},[877,3152,3153,3154,3156,3157,3159],{},"e",[905,3155,739],{}," > 18 and e",[905,3158,742],{}," == 1G2",[877,3161,3153,3162,3164,3165,3167],{},[905,3163,941],{}," >= 18 and e",[905,3166,951],{}," == \"1G2\"",[877,3169,3153,3170,3172,3173,3167],{},[905,3171,941],{}," >= 18 or e",[905,3174,951],{},[595,3176,3178],{"id":3177},"détecter-des-doublons","Détecter des doublons",[600,3180,3181,3182,3185],{},"Une utilisation classique du filtrage est la ",[604,3183,3184],{},"détection de doublons"," sur\nune colonne. On compare chaque ligne à toutes les autres et on signale celles\nqui apparaissent plusieurs fois :",[821,3187,3189],{"className":899,"code":3188,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\", \"age\": 16},\n    {\"nom\": \"Bob\",   \"age\": 17},\n    {\"nom\": \"Alice\", \"age\": 16},\n]\n\nnoms_vus = []\ndoublons = []\nfor e in eleves:\n    if e[\"nom\"] in noms_vus:\n        doublons.append(e[\"nom\"])\n    else:\n        noms_vus.append(e[\"nom\"])\n\nprint(doublons)  # ['Alice']\n",[829,3190,3191,3199,3219,3239,3259,3263,3267,3276,3285,3295,3310,3319,3326,3335,3339],{"__ignoreMap":827},[905,3192,3193,3195,3197],{"class":907,"line":908},[905,3194,912],{"class":911},[905,3196,916],{"class":915},[905,3198,919],{"class":911},[905,3200,3201,3203,3205,3207,3209,3211,3213,3215,3217],{"class":907,"line":922},[905,3202,925],{"class":911},[905,3204,929],{"class":928},[905,3206,932],{"class":911},[905,3208,935],{"class":928},[905,3210,840],{"class":911},[905,3212,941],{"class":928},[905,3214,932],{"class":911},[905,3216,752],{"class":946},[905,3218,959],{"class":911},[905,3220,3221,3223,3225,3227,3229,3231,3233,3235,3237],{"class":907,"line":962},[905,3222,925],{"class":911},[905,3224,929],{"class":928},[905,3226,932],{"class":911},[905,3228,971],{"class":928},[905,3230,938],{"class":911},[905,3232,941],{"class":928},[905,3234,932],{"class":911},[905,3236,763],{"class":946},[905,3238,959],{"class":911},[905,3240,3241,3243,3245,3247,3249,3251,3253,3255,3257],{"class":907,"line":994},[905,3242,925],{"class":911},[905,3244,929],{"class":928},[905,3246,932],{"class":911},[905,3248,935],{"class":928},[905,3250,840],{"class":911},[905,3252,941],{"class":928},[905,3254,932],{"class":911},[905,3256,752],{"class":946},[905,3258,959],{"class":911},[905,3260,3261],{"class":907,"line":1024},[905,3262,1088],{"class":911},[905,3264,3265],{"class":907,"line":1054},[905,3266,1182],{"emptyLinePlaceholder":1181},[905,3268,3269,3272,3274],{"class":907,"line":1085},[905,3270,3271],{"class":911},"noms_vus ",[905,3273,916],{"class":915},[905,3275,1347],{"class":911},[905,3277,3278,3281,3283],{"class":907,"line":1260},[905,3279,3280],{"class":911},"doublons ",[905,3282,916],{"class":915},[905,3284,1347],{"class":911},[905,3286,3287,3289,3291,3293],{"class":907,"line":1391},[905,3288,1592],{"class":915},[905,3290,2920],{"class":911},[905,3292,1358],{"class":915},[905,3294,1600],{"class":911},[905,3296,3297,3299,3301,3303,3305,3307],{"class":907,"line":1396},[905,3298,2420],{"class":915},[905,3300,2929],{"class":911},[905,3302,929],{"class":928},[905,3304,1371],{"class":911},[905,3306,1358],{"class":915},[905,3308,3309],{"class":911}," noms_vus:\n",[905,3311,3312,3315,3317],{"class":907,"line":1407},[905,3313,3314],{"class":911},"        doublons.append(e[",[905,3316,929],{"class":928},[905,3318,1257],{"class":911},[905,3320,3321,3324],{"class":907,"line":1578},[905,3322,3323],{"class":915},"    else",[905,3325,2436],{"class":911},[905,3327,3328,3331,3333],{"class":907,"line":1583},[905,3329,3330],{"class":911},"        noms_vus.append(e[",[905,3332,929],{"class":928},[905,3334,1257],{"class":911},[905,3336,3337],{"class":907,"line":1589},[905,3338,1182],{"emptyLinePlaceholder":1181},[905,3340,3341,3343,3346],{"class":907,"line":1603},[905,3342,1248],{"class":946},[905,3344,3345],{"class":911},"(doublons)  ",[905,3347,3348],{"class":1263},"# ['Alice']\n",[1105,3350,3351],{},[600,3352,3353,3354,3356,3357,3360],{},"Cette opération de détection de doublons est ce que ",[852,3355],{"code":590},"\nappelle un ",[604,3358,3359],{},"test de cohérence"," d'une table.",[595,3362,1643],{"id":1642},[874,3364,3365,3383,3397],{},[877,3366,3367,1113,3370,3372,3373,3375,3376,3379,3380,630],{},[604,3368,3369],{},"Comparer des chaînes",[829,3371,2430],{}," est sensible à la casse — ",[829,3374,935],{}," et\n",[829,3377,3378],{},"\"alice\""," sont différents. Au besoin, comparer après ",[829,3381,3382],{},".lower()",[877,3384,3385,3388,3389,3392,3393,3396],{},[604,3386,3387],{},"Comparer après conversion"," : si vous filtrez par âge et que la colonne\nest encore en chaîne, ",[829,3390,3391],{},"e[\"age\"] >= 17"," lèvera une ",[829,3394,3395],{},"TypeError",". Convertir\navant.",[877,3398,3399,1113,3402,3404,3405,3407,3408,3410,3411,3414,3415,630],{},[604,3400,3401],{},"Priorité des opérateurs",[829,3403,2884],{}," s'applique en premier, puis ",[829,3406,2873],{},",\npuis ",[829,3409,2878],{},". Au moindre doute, parenthésez :\n",[829,3412,3413],{},"(a and b) or c"," se lit mieux que ",[829,3416,3417],{},"a and b or c",[595,3419,1704],{"id":1703},[600,3421,3422,3423,3426,3427,3430,3431,3486,3487,3490,3491,630],{},"La recherche dichotomique (",[852,3424],{"code":3425},"PH04",") permet, ",[604,3428,3429],{},"sur une table\ntriée",", de trouver une ligne en ",[905,3432,3434,3457],{"className":3433},[1805],[905,3435,3437],{"className":3436},[1809],[1811,3438,3439],{"xmlns":1813},[1815,3440,3441,3455],{},[1818,3442,3443,3445,3447,3449,3451,3453],{},[1821,3444,1824],{"mathvariant":1823},[1826,3446,1193],{"stretchy":1828},[1821,3448,2172],{},[1826,3450,2175],{},[1821,3452,1831],{},[1826,3454,1834],{"stretchy":1828},[1836,3456,2182],{"encoding":1838},[905,3458,3460],{"className":3459,"ariaHidden":1844},[1843],[905,3461,3463,3466,3469,3472,3477,3480,3483],{"className":3462},[1848],[905,3464],{"className":3465,"style":1853},[1852],[905,3467,1824],{"className":3468,"style":1859},[1857,1858],[905,3470,1193],{"className":3471},[1863],[905,3473,2202,3475],{"className":3474},[2201],[905,3476,2206],{"style":2205},[905,3478],{"className":3479,"style":2211},[2210],[905,3481,1831],{"className":3482},[1857,1867],[905,3484,1834],{"className":3485},[1871]," — beaucoup plus\nrapide. Pour une recherche par clé fréquente, l'",[604,3488,3489],{},"indexation"," (cours 4) est\nencore mieux : ",[905,3492,3494,3514],{"className":3493},[1805],[905,3495,3497],{"className":3496},[1809],[1811,3498,3499],{"xmlns":1813},[1815,3500,3501,3511],{},[1818,3502,3503,3505,3507,3509],{},[1821,3504,1824],{"mathvariant":1823},[1826,3506,1193],{"stretchy":1828},[2025,3508,862],{},[1826,3510,1834],{"stretchy":1828},[1836,3512,3513],{"encoding":1838},"\\mathcal{O}(1)",[905,3515,3517],{"className":3516,"ariaHidden":1844},[1843],[905,3518,3520,3523,3526,3529,3532],{"className":3519},[1848],[905,3521],{"className":3522,"style":1853},[1852],[905,3524,1824],{"className":3525,"style":1859},[1857,1858],[905,3527,1193],{"className":3528},[1863],[905,3530,862],{"className":3531},[1857],[905,3533,1834],{"className":3534},[1871],[1720,3536,3537],{},"html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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":827,"searchDepth":922,"depth":922,"links":3539},[3540,3541,3542,3543,3544,3545,3553,3554,3555],{"id":597,"depth":922,"text":598},{"id":1780,"depth":922,"text":1781},{"id":2228,"depth":922,"text":2229},{"id":2512,"depth":922,"text":2513},{"id":2766,"depth":922,"text":2767},{"id":2864,"depth":922,"text":2865,"children":3546},[3547,3549,3551],{"id":2892,"depth":962,"text":3548},"and — deux conditions doivent être vraies",{"id":2997,"depth":962,"text":3550},"or — au moins une condition doit être vraie",{"id":3075,"depth":962,"text":3552},"not — inverser une condition",{"id":3177,"depth":922,"text":3178},{"id":1642,"depth":922,"text":1643},{"id":1703,"depth":922,"text":1704},"Sélectionner les lignes d'une table qui vérifient un critère, simple ou composé.",{},[3559,3561],{"slug":2492,"kind":1740,"question":2497,"choices":3560,"correct":862,"multi":1742,"explanation":2491},[2504,1690,2509],{"slug":3141,"kind":1740,"question":3146,"choices":3562,"correct":862,"multi":1742,"explanation":3140},[3563,3564,3565],"eage > 18 and eclasse == 1G2","e\"age\" >= 18 and e\"classe\" == \"1G2\"","e\"age\" >= 18 or e\"classe\" == \"1G2\"",{"title":315,"description":3556},"nwA5dsckL6UgcV8-RLpECCDuB0NK5MKNEQBFg2ZPoEg",{"id":3569,"title":319,"bo":3570,"body":3572,"description":4863,"eval":1735,"extension":1736,"labo":1735,"meta":4864,"navigation":1181,"path":320,"quizzes":4865,"readingTime":908,"seo":4872,"stem":321,"tp":1735,"__hash__":4873},"cours\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri.md",[3571],"PD04",{"type":592,"value":3573,"toc":4849},[3574,3576,3587,3590,3603,3609,3619,3686,3700,3729,3733,3750,3763,3800,4008,4019,4031,4035,4041,4226,4228,4234,4261,4265,4271,4356,4381,4385,4403,4410,4419,4423,4426,4527,4580,4589,4654,4720,4722,4770,4772,4846],[595,3575,598],{"id":597},[600,3577,3578,3579,3582,3583,3586],{},"Trier une table, c'est en réordonner les lignes selon une ",[604,3580,3581],{},"colonne"," (ou\nplusieurs). Cette opération courante a deux utilités principales : rendre\nles données ",[604,3584,3585],{},"lisibles"," pour un humain (classement alphabétique, palmarès)\net préparer la table à d'autres opérations (recherche dichotomique, jointure\nordonnée).",[600,3588,3589],{},"Imaginez une main de cartes qu'on aligne par valeur croissante, ou une liste\nde prénoms qu'on range par ordre alphabétique : trier, c'est exactement cela\n— mais à grande échelle et selon n'importe quel critère choisi.",[600,3591,3592,3594,3595,3598,3599,3602],{},[852,3593],{"code":3571}," précise que vous pouvez utiliser une ",[604,3596,3597],{},"fonction de tri\nintégrée"," à la bibliothèque standard — pas besoin de réécrire un algorithme\nde tri. C'est ce que nous ferons avec la fonction ",[829,3600,3601],{},"sorted()"," de Python.",[595,3604,3606,3607],{"id":3605},"la-fonction-sorted","La fonction ",[829,3608,3601],{},[600,3610,3611,3614,3615,3618],{},[829,3612,3613],{},"sorted(iterable)"," renvoie une ",[604,3616,3617],{},"nouvelle liste"," contenant les éléments de\nl'itérable, triés par ordre croissant. C'est la version la plus simple :",[821,3620,3622],{"className":899,"code":3621,"language":901,"meta":827,"style":827},"nombres = [3, 1, 4, 1, 5, 9, 2, 6]\nprint(sorted(nombres))\n# [1, 1, 2, 3, 4, 5, 6, 9]\n",[829,3623,3624,3669,3681],{"__ignoreMap":827},[905,3625,3626,3629,3631,3634,3636,3638,3640,3642,3645,3647,3649,3651,3653,3655,3658,3660,3662,3664,3667],{"class":907,"line":908},[905,3627,3628],{"class":911},"nombres ",[905,3630,916],{"class":915},[905,3632,3633],{"class":911}," [",[905,3635,1139],{"class":946},[905,3637,840],{"class":911},[905,3639,862],{"class":946},[905,3641,840],{"class":911},[905,3643,3644],{"class":946},"4",[905,3646,840],{"class":911},[905,3648,862],{"class":946},[905,3650,840],{"class":911},[905,3652,1142],{"class":946},[905,3654,840],{"class":911},[905,3656,3657],{"class":946},"9",[905,3659,840],{"class":911},[905,3661,2027],{"class":946},[905,3663,840],{"class":911},[905,3665,3666],{"class":946},"6",[905,3668,1088],{"class":911},[905,3670,3671,3673,3675,3678],{"class":907,"line":922},[905,3672,1248],{"class":946},[905,3674,1193],{"class":911},[905,3676,3677],{"class":946},"sorted",[905,3679,3680],{"class":911},"(nombres))\n",[905,3682,3683],{"class":907,"line":962},[905,3684,3685],{"class":1263},"# [1, 1, 2, 3, 4, 5, 6, 9]\n",[712,3687,3688],{},[600,3689,3690,3692,3693,3696,3697,630],{},[829,3691,3601],{}," ",[604,3694,3695],{},"ne modifie pas"," la liste d'origine — elle retourne une copie\ntriée. Pour un tri en place qui modifie la liste, utilisez la méthode\n",[829,3698,3699],{},"liste.sort()",[860,3701,3704,3713],{"correct":862,"explanation":3702,"slug":3703},"sorted() renvoie une nouvelle liste triée en ordre croissant par défaut.","tri-c1",[866,3705,3706],{"v-slot:question":827},[600,3707,3708,3709,3712],{},"Que retourne sorted(",[905,3710,3711],{},"3, 1, 2",") ?",[866,3714,3715],{"v-slot:choices":827},[874,3716,3717,3719,3724],{},[877,3718,1690],{},[877,3720,3721],{},[905,3722,3723],{},"1, 2, 3",[877,3725,3726],{},[905,3727,3728],{},"3, 2, 1",[595,3730,3732],{"id":3731},"trier-une-table-par-une-colonne","Trier une table par une colonne",[600,3734,3735,3736,3738,3739,3742,3743,3746,3747,630],{},"Sur une liste de dictionnaires, ",[829,3737,3601],{}," seul ne sait pas comparer — un\ndictionnaire ",[829,3740,3741],{},"{\"nom\": \"Alice\", ...}"," n'a pas d'ordre intrinsèque. Il faut\nindiquer ",[604,3744,3745],{},"selon quelle colonne"," trier, via le paramètre ",[829,3748,3749],{},"key=",[600,3751,3752,3754,3755,3758,3759,3762],{},[829,3753,3749],{}," attend une ",[604,3756,3757],{},"fonction"," qui, appliquée à une ligne, retourne la valeur\nà utiliser pour la comparaison. On utilise pour cela une ",[604,3760,3761],{},"fonction lambda","\nou une fonction nommée :",[712,3764,3765],{},[600,3766,3767,3692,3770,3773,3774,1113,3777,3780,3781,3783,3784,3787,3788,3791,3792,3795,3796,3799],{},[604,3768,3769],{},"En attendant le cours PG.",[829,3771,3772],{},"lambda x: ..."," se lit comme une ",[604,3775,3776],{},"mini-fonction\nsans nom",[829,3778,3779],{},"lambda e: e[\"nom\"]"," équivaut à une fonction qui prendrait ",[829,3782,3153],{},"\nen paramètre et renverrait ",[829,3785,3786],{},"e[\"nom\"]",". Pratique quand la fonction est trop\ncourte pour mériter un ",[829,3789,3790],{},"def",". La notion ",[829,3793,3794],{},"lambda"," est étudiée en détail au\nchapitre ",[604,3797,3798],{},"PG — Langages et programmation"," ; ici, retenez juste la lecture.",[821,3801,3803],{"className":899,"code":3802,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n]\n\n# Tri par nom (ordre alphabétique)\npar_nom = sorted(eleves, key=lambda e: e[\"nom\"])\n\nfor e in par_nom:\n    print(e[\"nom\"])\n# Alice\n# Bob\n# Chloé\n# Dimitri\n",[829,3804,3805,3813,3841,3869,3897,3925,3929,3933,3938,3964,3968,3979,3989,3993,3998,4003],{"__ignoreMap":827},[905,3806,3807,3809,3811],{"class":907,"line":908},[905,3808,912],{"class":911},[905,3810,916],{"class":915},[905,3812,919],{"class":911},[905,3814,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839],{"class":907,"line":922},[905,3816,925],{"class":911},[905,3818,929],{"class":928},[905,3820,932],{"class":911},[905,3822,1003],{"class":928},[905,3824,938],{"class":911},[905,3826,941],{"class":928},[905,3828,932],{"class":911},[905,3830,752],{"class":946},[905,3832,840],{"class":911},[905,3834,951],{"class":928},[905,3836,932],{"class":911},[905,3838,956],{"class":928},[905,3840,959],{"class":911},[905,3842,3843,3845,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865,3867],{"class":907,"line":962},[905,3844,925],{"class":911},[905,3846,929],{"class":928},[905,3848,932],{"class":911},[905,3850,935],{"class":928},[905,3852,938],{"class":911},[905,3854,941],{"class":928},[905,3856,932],{"class":911},[905,3858,752],{"class":946},[905,3860,840],{"class":911},[905,3862,951],{"class":928},[905,3864,932],{"class":911},[905,3866,956],{"class":928},[905,3868,959],{"class":911},[905,3870,3871,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891,3893,3895],{"class":907,"line":994},[905,3872,925],{"class":911},[905,3874,929],{"class":928},[905,3876,932],{"class":911},[905,3878,1033],{"class":928},[905,3880,840],{"class":911},[905,3882,941],{"class":928},[905,3884,932],{"class":911},[905,3886,763],{"class":946},[905,3888,840],{"class":911},[905,3890,951],{"class":928},[905,3892,932],{"class":911},[905,3894,956],{"class":928},[905,3896,959],{"class":911},[905,3898,3899,3901,3903,3905,3907,3909,3911,3913,3915,3917,3919,3921,3923],{"class":907,"line":1024},[905,3900,925],{"class":911},[905,3902,929],{"class":928},[905,3904,932],{"class":911},[905,3906,971],{"class":928},[905,3908,974],{"class":911},[905,3910,941],{"class":928},[905,3912,932],{"class":911},[905,3914,763],{"class":946},[905,3916,840],{"class":911},[905,3918,951],{"class":928},[905,3920,932],{"class":911},[905,3922,989],{"class":928},[905,3924,959],{"class":911},[905,3926,3927],{"class":907,"line":1054},[905,3928,1088],{"class":911},[905,3930,3931],{"class":907,"line":1085},[905,3932,1182],{"emptyLinePlaceholder":1181},[905,3934,3935],{"class":907,"line":1260},[905,3936,3937],{"class":1263},"# Tri par nom (ordre alphabétique)\n",[905,3939,3940,3943,3945,3948,3951,3954,3957,3960,3962],{"class":907,"line":1391},[905,3941,3942],{"class":911},"par_nom ",[905,3944,916],{"class":915},[905,3946,3947],{"class":946}," sorted",[905,3949,3950],{"class":911},"(eleves, ",[905,3952,3953],{"class":1201},"key",[905,3955,3956],{"class":915},"=lambda",[905,3958,3959],{"class":911}," e: e[",[905,3961,929],{"class":928},[905,3963,1257],{"class":911},[905,3965,3966],{"class":907,"line":1396},[905,3967,1182],{"emptyLinePlaceholder":1181},[905,3969,3970,3972,3974,3976],{"class":907,"line":1407},[905,3971,1592],{"class":915},[905,3973,2920],{"class":911},[905,3975,1358],{"class":915},[905,3977,3978],{"class":911}," par_nom:\n",[905,3980,3981,3983,3985,3987],{"class":907,"line":1578},[905,3982,1606],{"class":946},[905,3984,2975],{"class":911},[905,3986,929],{"class":928},[905,3988,1257],{"class":911},[905,3990,3991],{"class":907,"line":1583},[905,3992,2849],{"class":1263},[905,3994,3995],{"class":907,"line":1589},[905,3996,3997],{"class":1263},"# Bob\n",[905,3999,4000],{"class":907,"line":1603},[905,4001,4002],{"class":1263},"# Chloé\n",[905,4004,4005],{"class":907,"line":2465},[905,4006,4007],{"class":1263},"# Dimitri\n",[600,4009,4010,4012,4013,4015,4016,4018],{},[829,4011,3779],{}," est une mini-fonction sans nom, qu'on définit à la\nvolée : appliquée à une ligne ",[829,4014,3153],{},", elle retourne ",[829,4017,3786],{},". C'est elle qui\nsert de critère de comparaison.",[1105,4020,4021],{},[600,4022,4023,4024,4027,4028,4030],{},"On peut aussi utiliser ",[829,4025,4026],{},"operator.itemgetter(\"nom\")"," qui fait la même chose\nmais demande un import. ",[829,4029,3794],{}," est suffisant pour ce qu'on fait.",[595,4032,4034],{"id":4033},"tri-par-colonne-numérique","Tri par colonne numérique",[600,4036,4037,4038,819],{},"Trier par âge fonctionne exactement de la même façon, à condition que la\ncolonne soit ",[604,4039,4040],{},"numérique",[1419,4042,4043],{},[821,4044,4046],{"className":899,"code":4045,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n]\n\npar_age = sorted(eleves, key=lambda e: e[\"age\"])\n\nfor e in par_age:\n    print(e[\"age\"], e[\"nom\"])\n",[829,4047,4048,4056,4084,4112,4140,4168,4172,4176,4197,4201,4212],{"__ignoreMap":827},[905,4049,4050,4052,4054],{"class":907,"line":908},[905,4051,912],{"class":911},[905,4053,916],{"class":915},[905,4055,919],{"class":911},[905,4057,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076,4078,4080,4082],{"class":907,"line":922},[905,4059,925],{"class":911},[905,4061,929],{"class":928},[905,4063,932],{"class":911},[905,4065,1003],{"class":928},[905,4067,938],{"class":911},[905,4069,941],{"class":928},[905,4071,932],{"class":911},[905,4073,752],{"class":946},[905,4075,840],{"class":911},[905,4077,951],{"class":928},[905,4079,932],{"class":911},[905,4081,956],{"class":928},[905,4083,959],{"class":911},[905,4085,4086,4088,4090,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110],{"class":907,"line":962},[905,4087,925],{"class":911},[905,4089,929],{"class":928},[905,4091,932],{"class":911},[905,4093,935],{"class":928},[905,4095,938],{"class":911},[905,4097,941],{"class":928},[905,4099,932],{"class":911},[905,4101,752],{"class":946},[905,4103,840],{"class":911},[905,4105,951],{"class":928},[905,4107,932],{"class":911},[905,4109,956],{"class":928},[905,4111,959],{"class":911},[905,4113,4114,4116,4118,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138],{"class":907,"line":994},[905,4115,925],{"class":911},[905,4117,929],{"class":928},[905,4119,932],{"class":911},[905,4121,1033],{"class":928},[905,4123,840],{"class":911},[905,4125,941],{"class":928},[905,4127,932],{"class":911},[905,4129,763],{"class":946},[905,4131,840],{"class":911},[905,4133,951],{"class":928},[905,4135,932],{"class":911},[905,4137,956],{"class":928},[905,4139,959],{"class":911},[905,4141,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166],{"class":907,"line":1024},[905,4143,925],{"class":911},[905,4145,929],{"class":928},[905,4147,932],{"class":911},[905,4149,971],{"class":928},[905,4151,974],{"class":911},[905,4153,941],{"class":928},[905,4155,932],{"class":911},[905,4157,763],{"class":946},[905,4159,840],{"class":911},[905,4161,951],{"class":928},[905,4163,932],{"class":911},[905,4165,989],{"class":928},[905,4167,959],{"class":911},[905,4169,4170],{"class":907,"line":1054},[905,4171,1088],{"class":911},[905,4173,4174],{"class":907,"line":1085},[905,4175,1182],{"emptyLinePlaceholder":1181},[905,4177,4178,4181,4183,4185,4187,4189,4191,4193,4195],{"class":907,"line":1260},[905,4179,4180],{"class":911},"par_age ",[905,4182,916],{"class":915},[905,4184,3947],{"class":946},[905,4186,3950],{"class":911},[905,4188,3953],{"class":1201},[905,4190,3956],{"class":915},[905,4192,3959],{"class":911},[905,4194,941],{"class":928},[905,4196,1257],{"class":911},[905,4198,4199],{"class":907,"line":1391},[905,4200,1182],{"emptyLinePlaceholder":1181},[905,4202,4203,4205,4207,4209],{"class":907,"line":1396},[905,4204,1592],{"class":915},[905,4206,2920],{"class":911},[905,4208,1358],{"class":915},[905,4210,4211],{"class":911}," par_age:\n",[905,4213,4214,4216,4218,4220,4222,4224],{"class":907,"line":1407},[905,4215,1606],{"class":946},[905,4217,2975],{"class":911},[905,4219,941],{"class":928},[905,4221,2980],{"class":911},[905,4223,929],{"class":928},[905,4225,1257],{"class":911},[600,4227,2757],{},[821,4229,4232],{"className":4230,"code":4231,"language":826,"meta":827},[824],"16 Chloé\n16 Alice\n17 Dimitri\n17 Bob\n",[829,4233,4231],{"__ignoreMap":827},[832,4235,4236],{},[600,4237,4238,4239,4241,4242,4245,4246,4249,4250,4253,4254,4257,4258,630],{},"Si la colonne ",[829,4240,739],{}," est encore une chaîne (ex. ",[829,4243,4244],{},"\"17\"","), le tri se fait dans\nl'ordre ",[604,4247,4248],{},"lexicographique"," des chaînes : ",[829,4251,4252],{},"\"10\" \u003C \"9\""," ! Convertir avant\navec ",[829,4255,4256],{},"int()"," ou utiliser ",[829,4259,4260],{},"key=lambda e: int(e[\"age\"])",[595,4262,4264],{"id":4263},"tri-descendant","Tri descendant",[600,4266,4267,4268,819],{},"Pour inverser l'ordre, ajouter ",[829,4269,4270],{},"reverse=True",[821,4272,4274],{"className":899,"code":4273,"language":901,"meta":827,"style":827},"par_age_desc = sorted(eleves, key=lambda e: e[\"age\"], reverse=True)\n\nfor e in par_age_desc:\n    print(e[\"age\"], e[\"nom\"])\n# 17 Dimitri\n# 17 Bob\n# 16 Chloé\n# 16 Alice\n",[829,4275,4276,4307,4311,4322,4336,4341,4346,4351],{"__ignoreMap":827},[905,4277,4278,4281,4283,4285,4287,4289,4291,4293,4295,4297,4300,4302,4305],{"class":907,"line":908},[905,4279,4280],{"class":911},"par_age_desc ",[905,4282,916],{"class":915},[905,4284,3947],{"class":946},[905,4286,3950],{"class":911},[905,4288,3953],{"class":1201},[905,4290,3956],{"class":915},[905,4292,3959],{"class":911},[905,4294,941],{"class":928},[905,4296,1614],{"class":911},[905,4298,4299],{"class":1201},"reverse",[905,4301,916],{"class":915},[905,4303,4304],{"class":946},"True",[905,4306,1630],{"class":911},[905,4308,4309],{"class":907,"line":922},[905,4310,1182],{"emptyLinePlaceholder":1181},[905,4312,4313,4315,4317,4319],{"class":907,"line":962},[905,4314,1592],{"class":915},[905,4316,2920],{"class":911},[905,4318,1358],{"class":915},[905,4320,4321],{"class":911}," par_age_desc:\n",[905,4323,4324,4326,4328,4330,4332,4334],{"class":907,"line":994},[905,4325,1606],{"class":946},[905,4327,2975],{"class":911},[905,4329,941],{"class":928},[905,4331,2980],{"class":911},[905,4333,929],{"class":928},[905,4335,1257],{"class":911},[905,4337,4338],{"class":907,"line":1024},[905,4339,4340],{"class":1263},"# 17 Dimitri\n",[905,4342,4343],{"class":907,"line":1054},[905,4344,4345],{"class":1263},"# 17 Bob\n",[905,4347,4348],{"class":907,"line":1085},[905,4349,4350],{"class":1263},"# 16 Chloé\n",[905,4352,4353],{"class":907,"line":1260},[905,4354,4355],{"class":1263},"# 16 Alice\n",[860,4357,4360,4365],{"correct":1254,"explanation":4358,"slug":4359},"Le paramètre reverse=True inverse l'ordre du tri standard.","tri-c2",[866,4361,4362],{"v-slot:question":827},[600,4363,4364],{},"Comment trier la table par nom dans l'ordre Z→A ?",[866,4366,4367],{"v-slot:choices":827},[874,4368,4369,4375,4378],{},[877,4370,4371,4372,4374],{},"sorted(t, key=lambda e: e",[905,4373,929],{},", reverse=True)",[877,4376,4377],{},"sorted(t, reverse=True, key=\"nom\")",[877,4379,4380],{},"sorted(t).reverse()",[595,4382,4384],{"id":4383},"ordre-stable","Ordre stable",[600,4386,4387,4388,4391,4392,4394,4395,4398,4399,4402],{},"Une propriété ",[604,4389,4390],{},"essentielle"," de ",[829,4393,3601],{}," : c'est un ",[604,4396,4397],{},"tri stable",". Cela\nsignifie que les éléments ayant la même valeur de clé ",[604,4400,4401],{},"conservent leur\nordre relatif d'origine",". C'est l'équivalent d'un bibliothécaire qui range\ndes livres par auteur sans bouleverser l'ordre des éditions dans chaque\nauteur.",[600,4404,4405,4406,4409],{},"Reprenez l'exemple précédent. Dans la table d'entrée, Chloé apparaît ",[604,4407,4408],{},"avant","\nAlice. Après le tri par âge, Chloé et Alice ont toutes deux 16 ans — et le\ntri stable les place dans le même ordre que dans l'entrée : Chloé d'abord,\npuis Alice.",[712,4411,4412],{},[600,4413,4414,4415,4418],{},"Cette stabilité a une conséquence pratique très utile : pour trier par\nplusieurs critères, il ",[604,4416,4417],{},"suffit de trier plusieurs fois",", du critère le\nmoins prioritaire au plus prioritaire. Le tri stable préserve l'ordre des\ntris précédents pour les égalités.",[595,4420,4422],{"id":4421},"tri-par-plusieurs-critères","Tri par plusieurs critères",[600,4424,4425],{},"Tri par classe, puis par nom à l'intérieur de chaque classe :",[821,4427,4429],{"className":899,"code":4428,"language":901,"meta":827,"style":827},"# Méthode 1 : tris successifs (du moins prioritaire au plus prioritaire)\npar_nom = sorted(eleves, key=lambda e: e[\"nom\"])\npar_classe_puis_nom = sorted(par_nom, key=lambda e: e[\"classe\"])\n\nfor e in par_classe_puis_nom:\n    print(e[\"classe\"], e[\"nom\"])\n# 1G2 Alice\n# 1G2 Chloé\n# 1G2 Dimitri\n# 1G3 Bob\n",[829,4430,4431,4436,4456,4478,4482,4493,4507,4512,4517,4522],{"__ignoreMap":827},[905,4432,4433],{"class":907,"line":908},[905,4434,4435],{"class":1263},"# Méthode 1 : tris successifs (du moins prioritaire au plus prioritaire)\n",[905,4437,4438,4440,4442,4444,4446,4448,4450,4452,4454],{"class":907,"line":922},[905,4439,3942],{"class":911},[905,4441,916],{"class":915},[905,4443,3947],{"class":946},[905,4445,3950],{"class":911},[905,4447,3953],{"class":1201},[905,4449,3956],{"class":915},[905,4451,3959],{"class":911},[905,4453,929],{"class":928},[905,4455,1257],{"class":911},[905,4457,4458,4461,4463,4465,4468,4470,4472,4474,4476],{"class":907,"line":962},[905,4459,4460],{"class":911},"par_classe_puis_nom ",[905,4462,916],{"class":915},[905,4464,3947],{"class":946},[905,4466,4467],{"class":911},"(par_nom, ",[905,4469,3953],{"class":1201},[905,4471,3956],{"class":915},[905,4473,3959],{"class":911},[905,4475,951],{"class":928},[905,4477,1257],{"class":911},[905,4479,4480],{"class":907,"line":994},[905,4481,1182],{"emptyLinePlaceholder":1181},[905,4483,4484,4486,4488,4490],{"class":907,"line":1024},[905,4485,1592],{"class":915},[905,4487,2920],{"class":911},[905,4489,1358],{"class":915},[905,4491,4492],{"class":911}," par_classe_puis_nom:\n",[905,4494,4495,4497,4499,4501,4503,4505],{"class":907,"line":1054},[905,4496,1606],{"class":946},[905,4498,2975],{"class":911},[905,4500,951],{"class":928},[905,4502,2980],{"class":911},[905,4504,929],{"class":928},[905,4506,1257],{"class":911},[905,4508,4509],{"class":907,"line":1085},[905,4510,4511],{"class":1263},"# 1G2 Alice\n",[905,4513,4514],{"class":907,"line":1260},[905,4515,4516],{"class":1263},"# 1G2 Chloé\n",[905,4518,4519],{"class":907,"line":1391},[905,4520,4521],{"class":1263},"# 1G2 Dimitri\n",[905,4523,4524],{"class":907,"line":1396},[905,4525,4526],{"class":1263},"# 1G3 Bob\n",[1105,4528,4529,4536],{},[600,4530,4531,4532,4535],{},"Méthode plus directe : utiliser un ",[604,4533,4534],{},"tuple"," comme clé. Python compare les\ntuples lexicographiquement (premier élément d'abord, second en cas\nd'égalité, etc.) :",[821,4537,4539],{"className":899,"code":4538,"language":901,"meta":827,"style":827},"par_classe_puis_nom = sorted(\n    eleves,\n    key=lambda e: (e[\"classe\"], e[\"nom\"]),\n)\n",[829,4540,4541,4552,4557,4576],{"__ignoreMap":827},[905,4542,4543,4545,4547,4549],{"class":907,"line":908},[905,4544,4460],{"class":911},[905,4546,916],{"class":915},[905,4548,3947],{"class":946},[905,4550,4551],{"class":911},"(\n",[905,4553,4554],{"class":907,"line":922},[905,4555,4556],{"class":911},"    eleves,\n",[905,4558,4559,4562,4564,4567,4569,4571,4573],{"class":907,"line":962},[905,4560,4561],{"class":1201},"    key",[905,4563,3956],{"class":915},[905,4565,4566],{"class":911}," e: (e[",[905,4568,951],{"class":928},[905,4570,2980],{"class":911},[905,4572,929],{"class":928},[905,4574,4575],{"class":911},"]),\n",[905,4577,4578],{"class":907,"line":994},[905,4579,1630],{"class":911},[595,4581,4583,4586,4587],{"id":4582},"sort-vs-sorted",[829,4584,4585],{},"sort()"," vs ",[829,4588,3601],{},[639,4590,4591,4607],{},[642,4592,4593],{},[645,4594,4595,4598,4603],{},[648,4596,4597],{},"Aspect",[648,4599,4600],{},[829,4601,4602],{},"sorted(liste)",[648,4604,4605],{},[829,4606,3699],{},[655,4608,4609,4621,4632,4643],{},[645,4610,4611,4614,4617],{},[660,4612,4613],{},"Type de retour",[660,4615,4616],{},"Nouvelle liste triée",[660,4618,4619],{},[829,4620,1690],{},[645,4622,4623,4626,4629],{},[660,4624,4625],{},"Effet sur l'original",[660,4627,4628],{},"Aucun",[660,4630,4631],{},"Trié en place",[645,4633,4634,4637,4640],{},[660,4635,4636],{},"Utilisable sur",[660,4638,4639],{},"Tout itérable",[660,4641,4642],{},"Liste seulement",[645,4644,4645,4648,4651],{},[660,4646,4647],{},"Quand l'utiliser",[660,4649,4650],{},"Si on veut garder l'original",[660,4652,4653],{},"Si on veut économiser la mémoire",[821,4655,4657],{"className":899,"code":4656,"language":901,"meta":827,"style":827},"nombres = [3, 1, 2]\nnombres.sort()\nprint(nombres)  # [1, 2, 3]\n\nnombres.sort(reverse=True)\nprint(nombres)  # [3, 2, 1]\n",[829,4658,4659,4679,4684,4694,4698,4711],{"__ignoreMap":827},[905,4660,4661,4663,4665,4667,4669,4671,4673,4675,4677],{"class":907,"line":908},[905,4662,3628],{"class":911},[905,4664,916],{"class":915},[905,4666,3633],{"class":911},[905,4668,1139],{"class":946},[905,4670,840],{"class":911},[905,4672,862],{"class":946},[905,4674,840],{"class":911},[905,4676,2027],{"class":946},[905,4678,1088],{"class":911},[905,4680,4681],{"class":907,"line":922},[905,4682,4683],{"class":911},"nombres.sort()\n",[905,4685,4686,4688,4691],{"class":907,"line":962},[905,4687,1248],{"class":946},[905,4689,4690],{"class":911},"(nombres)  ",[905,4692,4693],{"class":1263},"# [1, 2, 3]\n",[905,4695,4696],{"class":907,"line":994},[905,4697,1182],{"emptyLinePlaceholder":1181},[905,4699,4700,4703,4705,4707,4709],{"class":907,"line":1024},[905,4701,4702],{"class":911},"nombres.sort(",[905,4704,4299],{"class":1201},[905,4706,916],{"class":915},[905,4708,4304],{"class":946},[905,4710,1630],{"class":911},[905,4712,4713,4715,4717],{"class":907,"line":1054},[905,4714,1248],{"class":946},[905,4716,4690],{"class":911},[905,4718,4719],{"class":1263},"# [3, 2, 1]\n",[595,4721,1643],{"id":1642},[874,4723,4724,4744,4758],{},[877,4725,4726,1113,4729,4732,4733,3375,4736,4739,4740,4743],{},[604,4727,4728],{},"Tri sur une chaîne accentuée",[829,4730,4731],{},"\"é\""," n'est pas placé entre ",[829,4734,4735],{},"\"e\"",[829,4737,4738],{},"\"f\""," mais après tous les caractères ASCII. Pour un tri linguistique\ncorrect, utiliser le module ",[829,4741,4742],{},"locale"," (hors programme).",[877,4745,4746,1113,4751,4754,4755,4757],{},[604,4747,4748,4749],{},"Mélanger types et ",[829,4750,1690],{},[829,4752,4753],{},"sorted([1, None, 2])"," lève ",[829,4756,3395],{},".\nFiltrer ou normaliser avant.",[877,4759,4760,1113,4763,4766,4767,630],{},[604,4761,4762],{},"Sensibilité à la casse",[829,4764,4765],{},"\"alice\" > \"Bob\""," en ASCII (minuscules > majuscules).\nPour un tri insensible : ",[829,4768,4769],{},"key=lambda e: e[\"nom\"].lower()",[595,4771,1704],{"id":1703},[600,4773,4774,4775,4778,4779,4781,4782,630],{},"Les algorithmes de tri que vous étudierez en algorithmique\n(",[852,4776],{"code":4777},"PH05"," : tri par insertion, tri par sélection) sont au cœur de\nce que fait ",[829,4780,3601],{}," — mais Python utilise en réalité un tri plus\nsophistiqué (Timsort) dont la complexité est ",[905,4783,4785,4811],{"className":4784},[1805],[905,4786,4788],{"className":4787},[1809],[1811,4789,4790],{"xmlns":1813},[1815,4791,4792,4808],{},[1818,4793,4794,4796,4798,4800,4802,4804,4806],{},[1821,4795,1824],{"mathvariant":1823},[1826,4797,1193],{"stretchy":1828},[1821,4799,1831],{},[1821,4801,2172],{},[1826,4803,2175],{},[1821,4805,1831],{},[1826,4807,1834],{"stretchy":1828},[1836,4809,4810],{"encoding":1838},"\\mathcal{O}(n \\log n)",[905,4812,4814],{"className":4813,"ariaHidden":1844},[1843],[905,4815,4817,4820,4823,4826,4829,4832,4837,4840,4843],{"className":4816},[1848],[905,4818],{"className":4819,"style":1853},[1852],[905,4821,1824],{"className":4822,"style":1859},[1857,1858],[905,4824,1193],{"className":4825},[1863],[905,4827,1831],{"className":4828},[1857,1867],[905,4830],{"className":4831,"style":2211},[2210],[905,4833,2202,4835],{"className":4834},[2201],[905,4836,2206],{"style":2205},[905,4838],{"className":4839,"style":2211},[2210],[905,4841,1831],{"className":4842},[1857,1867],[905,4844,1834],{"className":4845},[1871],[1720,4847,4848],{},"html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":827,"searchDepth":922,"depth":922,"links":4850},[4851,4852,4854,4855,4856,4857,4858,4859,4861,4862],{"id":597,"depth":922,"text":598},{"id":3605,"depth":922,"text":4853},"La fonction sorted()",{"id":3731,"depth":922,"text":3732},{"id":4033,"depth":922,"text":4034},{"id":4263,"depth":922,"text":4264},{"id":4383,"depth":922,"text":4384},{"id":4421,"depth":922,"text":4422},{"id":4582,"depth":922,"text":4860},"sort() vs sorted()",{"id":1642,"depth":922,"text":1643},{"id":1703,"depth":922,"text":1704},"Tri par colonne avec `sorted()` et `key=`, ordre stable, tri multi-critères.",{},[4866,4869],{"slug":3703,"kind":1740,"question":4867,"choices":4868,"correct":862,"multi":1742,"explanation":3702},"Que retourne sorted(3, 1, 2) ?",[1690,3723,3728],{"slug":4359,"kind":1740,"question":4364,"choices":4870,"correct":1254,"multi":1742,"explanation":4358},[4871,4377,4380],"sorted(t, key=lambda e: e\"nom\", reverse=True)",{"title":319,"description":4863},"QNdy5nC73WOOjJhXBCHk1Bo_4uhWg-ANiHGEE7VDn4I",{"id":4875,"title":323,"bo":4876,"body":4878,"description":6730,"eval":1735,"extension":1736,"labo":1735,"meta":6731,"navigation":1181,"path":324,"quizzes":6732,"readingTime":908,"seo":6737,"stem":325,"tp":1735,"__hash__":6738},"cours\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation.md",[4877,589],"PD01",{"type":592,"value":4879,"toc":6713},[4880,4882,4904,4913,4922,4926,4930,4933,5062,5080,5084,5142,5351,5353,5359,5380,5384,5387,5436,5458,5462,5589,5596,5600,5603,5606,5703,5706,5807,5818,5822,5825,5951,5953,5959,6035,6039,6113,6478,6480,6485,6503,6507,6514,6531,6612,6625,6647,6649,6694,6696,6710],[595,4881,598],{"id":597},[600,4883,4884,4885,4888,4889,4892,4893,4896,4897,4900,4901,630],{},"Les opérations vues jusqu'ici travaillaient sur ",[604,4886,4887],{},"une seule table",". Mais\ndans la vraie vie, l'information est souvent répartie sur ",[604,4890,4891],{},"plusieurs","\ntables — une table des élèves, une table des notes, une table des classes —\nqu'il faut ",[604,4894,4895],{},"croiser"," pour répondre à une question. C'est l'opération de\n",[604,4898,4899],{},"fusion",", ou ",[604,4902,4903],{},"jointure",[600,4905,4906,4907,4909,4910,4912],{},"L'opération réciproque est l'",[604,4908,3489],{}," : transformer une table (liste\nde lignes) en un ",[604,4911,1162],{}," dont les clés sont les valeurs d'une\ncolonne. Au lieu de parcourir toute la table pour retrouver une ligne, on y\naccède directement.",[600,4914,4915,4916,4918,4919,4921],{},"Ce cours couvre les deux items du programme ",[852,4917],{"code":4877}," (fusion) et\n",[852,4920],{"code":589}," (indexation par clé).",[595,4923,4925],{"id":4924},"indexer-une-table-par-une-colonne","Indexer une table par une colonne",[2890,4927,4929],{"id":4928},"le-problème","Le problème",[600,4931,4932],{},"Reprenez la table des élèves :",[821,4934,4936],{"className":899,"code":4935,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n]\n",[829,4937,4938,4946,4974,5002,5030,5058],{"__ignoreMap":827},[905,4939,4940,4942,4944],{"class":907,"line":908},[905,4941,912],{"class":911},[905,4943,916],{"class":915},[905,4945,919],{"class":911},[905,4947,4948,4950,4952,4954,4956,4958,4960,4962,4964,4966,4968,4970,4972],{"class":907,"line":922},[905,4949,925],{"class":911},[905,4951,929],{"class":928},[905,4953,932],{"class":911},[905,4955,935],{"class":928},[905,4957,938],{"class":911},[905,4959,941],{"class":928},[905,4961,932],{"class":911},[905,4963,752],{"class":946},[905,4965,840],{"class":911},[905,4967,951],{"class":928},[905,4969,932],{"class":911},[905,4971,956],{"class":928},[905,4973,959],{"class":911},[905,4975,4976,4978,4980,4982,4984,4986,4988,4990,4992,4994,4996,4998,5000],{"class":907,"line":962},[905,4977,925],{"class":911},[905,4979,929],{"class":928},[905,4981,932],{"class":911},[905,4983,971],{"class":928},[905,4985,974],{"class":911},[905,4987,941],{"class":928},[905,4989,932],{"class":911},[905,4991,763],{"class":946},[905,4993,840],{"class":911},[905,4995,951],{"class":928},[905,4997,932],{"class":911},[905,4999,989],{"class":928},[905,5001,959],{"class":911},[905,5003,5004,5006,5008,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028],{"class":907,"line":994},[905,5005,925],{"class":911},[905,5007,929],{"class":928},[905,5009,932],{"class":911},[905,5011,1003],{"class":928},[905,5013,938],{"class":911},[905,5015,941],{"class":928},[905,5017,932],{"class":911},[905,5019,752],{"class":946},[905,5021,840],{"class":911},[905,5023,951],{"class":928},[905,5025,932],{"class":911},[905,5027,956],{"class":928},[905,5029,959],{"class":911},[905,5031,5032,5034,5036,5038,5040,5042,5044,5046,5048,5050,5052,5054,5056],{"class":907,"line":1024},[905,5033,925],{"class":911},[905,5035,929],{"class":928},[905,5037,932],{"class":911},[905,5039,1033],{"class":928},[905,5041,840],{"class":911},[905,5043,941],{"class":928},[905,5045,932],{"class":911},[905,5047,763],{"class":946},[905,5049,840],{"class":911},[905,5051,951],{"class":928},[905,5053,932],{"class":911},[905,5055,956],{"class":928},[905,5057,959],{"class":911},[905,5059,5060],{"class":907,"line":1054},[905,5061,1088],{"class":911},[600,5063,5064,5065,5067,5068,5071,5072,5075,5076,5079],{},"Pour retrouver Chloé, vous savez faire : parcours linéaire avec un ",[829,5066,2474],{},"\n(cours 2). Mais si vous voulez chercher ",[604,5069,5070],{},"mille fois"," dans une table de\n",[604,5073,5074],{},"dix mille élèves",", vous ferez ",[604,5077,5078],{},"dix millions"," de comparaisons. Coûteux.",[2890,5081,5083],{"id":5082},"la-solution-un-dictionnaire-clé-ligne","La solution : un dictionnaire {clé → ligne}",[600,5085,5086,5087,5089,5090,5093,5094,5097,5098,5141],{},"Un index est un ",[604,5088,1162],{}," qui associe ",[604,5091,5092],{},"la valeur d'une colonne\nunique"," à ",[604,5095,5096],{},"la ligne complète",". Une fois construit, l'accès est en\n",[905,5099,5101,5120],{"className":5100},[1805],[905,5102,5104],{"className":5103},[1809],[1811,5105,5106],{"xmlns":1813},[1815,5107,5108,5118],{},[1818,5109,5110,5112,5114,5116],{},[1821,5111,1824],{"mathvariant":1823},[1826,5113,1193],{"stretchy":1828},[2025,5115,862],{},[1826,5117,1834],{"stretchy":1828},[1836,5119,3513],{"encoding":1838},[905,5121,5123],{"className":5122,"ariaHidden":1844},[1843],[905,5124,5126,5129,5132,5135,5138],{"className":5125},[1848],[905,5127],{"className":5128,"style":1853},[1852],[905,5130,1824],{"className":5131,"style":1859},[1857,1858],[905,5133,1193],{"className":5134},[1863],[905,5136,862],{"className":5137},[1857],[905,5139,1834],{"className":5140},[1871]," — quasi-instantané, quelle que soit la taille de la table.",[1419,5143,5144],{},[821,5145,5147],{"className":899,"code":5146,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"age\": 17, \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"age\": 16, \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"age\": 17, \"classe\": \"1G2\"},\n]\n\n# Construction de l'index par nom\nindex_par_nom = {}\nfor e in eleves:\n    index_par_nom[e[\"nom\"]] = e\n\n# Accès direct à une ligne par nom\nprint(index_par_nom[\"Chloé\"])\nprint(index_par_nom[\"Dimitri\"][\"classe\"])\n",[829,5148,5149,5157,5185,5213,5241,5269,5273,5277,5282,5292,5302,5317,5321,5326,5337],{"__ignoreMap":827},[905,5150,5151,5153,5155],{"class":907,"line":908},[905,5152,912],{"class":911},[905,5154,916],{"class":915},[905,5156,919],{"class":911},[905,5158,5159,5161,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181,5183],{"class":907,"line":922},[905,5160,925],{"class":911},[905,5162,929],{"class":928},[905,5164,932],{"class":911},[905,5166,935],{"class":928},[905,5168,938],{"class":911},[905,5170,941],{"class":928},[905,5172,932],{"class":911},[905,5174,752],{"class":946},[905,5176,840],{"class":911},[905,5178,951],{"class":928},[905,5180,932],{"class":911},[905,5182,956],{"class":928},[905,5184,959],{"class":911},[905,5186,5187,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207,5209,5211],{"class":907,"line":962},[905,5188,925],{"class":911},[905,5190,929],{"class":928},[905,5192,932],{"class":911},[905,5194,971],{"class":928},[905,5196,974],{"class":911},[905,5198,941],{"class":928},[905,5200,932],{"class":911},[905,5202,763],{"class":946},[905,5204,840],{"class":911},[905,5206,951],{"class":928},[905,5208,932],{"class":911},[905,5210,989],{"class":928},[905,5212,959],{"class":911},[905,5214,5215,5217,5219,5221,5223,5225,5227,5229,5231,5233,5235,5237,5239],{"class":907,"line":994},[905,5216,925],{"class":911},[905,5218,929],{"class":928},[905,5220,932],{"class":911},[905,5222,1003],{"class":928},[905,5224,938],{"class":911},[905,5226,941],{"class":928},[905,5228,932],{"class":911},[905,5230,752],{"class":946},[905,5232,840],{"class":911},[905,5234,951],{"class":928},[905,5236,932],{"class":911},[905,5238,956],{"class":928},[905,5240,959],{"class":911},[905,5242,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267],{"class":907,"line":1024},[905,5244,925],{"class":911},[905,5246,929],{"class":928},[905,5248,932],{"class":911},[905,5250,1033],{"class":928},[905,5252,840],{"class":911},[905,5254,941],{"class":928},[905,5256,932],{"class":911},[905,5258,763],{"class":946},[905,5260,840],{"class":911},[905,5262,951],{"class":928},[905,5264,932],{"class":911},[905,5266,956],{"class":928},[905,5268,959],{"class":911},[905,5270,5271],{"class":907,"line":1054},[905,5272,1088],{"class":911},[905,5274,5275],{"class":907,"line":1085},[905,5276,1182],{"emptyLinePlaceholder":1181},[905,5278,5279],{"class":907,"line":1260},[905,5280,5281],{"class":1263},"# Construction de l'index par nom\n",[905,5283,5284,5287,5289],{"class":907,"line":1391},[905,5285,5286],{"class":911},"index_par_nom ",[905,5288,916],{"class":915},[905,5290,5291],{"class":911}," {}\n",[905,5293,5294,5296,5298,5300],{"class":907,"line":1396},[905,5295,1592],{"class":915},[905,5297,2920],{"class":911},[905,5299,1358],{"class":915},[905,5301,1600],{"class":911},[905,5303,5304,5307,5309,5312,5314],{"class":907,"line":1407},[905,5305,5306],{"class":911},"    index_par_nom[e[",[905,5308,929],{"class":928},[905,5310,5311],{"class":911},"]] ",[905,5313,916],{"class":915},[905,5315,5316],{"class":911}," e\n",[905,5318,5319],{"class":907,"line":1578},[905,5320,1182],{"emptyLinePlaceholder":1181},[905,5322,5323],{"class":907,"line":1583},[905,5324,5325],{"class":1263},"# Accès direct à une ligne par nom\n",[905,5327,5328,5330,5333,5335],{"class":907,"line":1589},[905,5329,1248],{"class":946},[905,5331,5332],{"class":911},"(index_par_nom[",[905,5334,1003],{"class":928},[905,5336,1257],{"class":911},[905,5338,5339,5341,5343,5345,5347,5349],{"class":907,"line":1603},[905,5340,1248],{"class":946},[905,5342,5332],{"class":911},[905,5344,1033],{"class":928},[905,5346,1571],{"class":911},[905,5348,951],{"class":928},[905,5350,1257],{"class":911},[600,5352,2757],{},[821,5354,5357],{"className":5355,"code":5356,"language":826,"meta":827},[824],"{'nom': 'Chloé', 'age': 16, 'classe': '1G2'}\n1G2\n",[829,5358,5356],{"__ignoreMap":827},[712,5360,5361],{},[600,5362,5363,5364,5367,5368,5371,5372,5375,5376,5379],{},"La colonne choisie comme clé doit avoir des valeurs ",[604,5365,5366],{},"uniques"," — c'est ce\nqu'on appelle une ",[604,5369,5370],{},"clé primaire"," (vocabulaire que vous reverrez en\nTerminale, ",[852,5373],{"code":5374},"TB01",", à propos du modèle relationnel). Si deux\nlignes ont la même valeur, la seconde ",[604,5377,5378],{},"écrase"," la première dans l'index.",[2890,5381,5383],{"id":5382},"version-concise-compréhension-de-dictionnaire","Version concise (compréhension de dictionnaire)",[600,5385,5386],{},"Comme pour les listes, Python propose une syntaxe compacte :",[821,5388,5390],{"className":899,"code":5389,"language":901,"meta":827,"style":827},"index_par_nom = {e[\"nom\"]: e for e in eleves}\n\nprint(index_par_nom[\"Alice\"][\"age\"])  # 16\n",[829,5391,5392,5415,5419],{"__ignoreMap":827},[905,5393,5394,5396,5398,5401,5403,5406,5408,5410,5412],{"class":907,"line":908},[905,5395,5286],{"class":911},[905,5397,916],{"class":915},[905,5399,5400],{"class":911}," {e[",[905,5402,929],{"class":928},[905,5404,5405],{"class":911},"]: e ",[905,5407,1592],{"class":915},[905,5409,2920],{"class":911},[905,5411,1358],{"class":915},[905,5413,5414],{"class":911}," eleves}\n",[905,5416,5417],{"class":907,"line":922},[905,5418,1182],{"emptyLinePlaceholder":1181},[905,5420,5421,5423,5425,5427,5429,5431,5433],{"class":907,"line":962},[905,5422,1248],{"class":946},[905,5424,5332],{"class":911},[905,5426,935],{"class":928},[905,5428,1571],{"class":911},[905,5430,941],{"class":928},[905,5432,2846],{"class":911},[905,5434,5435],{"class":1263},"# 16\n",[860,5437,5440,5445],{"correct":862,"explanation":5438,"slug":5439},"Indexer transforme une recherche linéaire (O(n)) en accès direct par clé (O(1)).","fusion-indexation-c1",[866,5441,5442],{"v-slot:question":827},[600,5443,5444],{},"Quel est l'avantage principal d'un index par clé ?",[866,5446,5447],{"v-slot:choices":827},[874,5448,5449,5452,5455],{},[877,5450,5451],{},"Il économise la mémoire",[877,5453,5454],{},"Il permet un accès en O(1) au lieu de O(n)",[877,5456,5457],{},"Il trie automatiquement la table",[2890,5459,5461],{"id":5460},"index-vs-table-que-choisir","Index vs table : que choisir ?",[639,5463,5464,5477],{},[642,5465,5466],{},[645,5467,5468,5471,5474],{},[648,5469,5470],{},"Structure",[648,5472,5473],{},"Accès",[648,5475,5476],{},"Coût",[655,5478,5479,5533],{},[645,5480,5481,5484,5487],{},[660,5482,5483],{},"Liste de lignes",[660,5485,5486],{},"par index numérique ou parcours",[660,5488,5489,5532],{},[905,5490,5492,5511],{"className":5491},[1805],[905,5493,5495],{"className":5494},[1809],[1811,5496,5497],{"xmlns":1813},[1815,5498,5499,5509],{},[1818,5500,5501,5503,5505,5507],{},[1821,5502,1824],{"mathvariant":1823},[1826,5504,1193],{"stretchy":1828},[1821,5506,1831],{},[1826,5508,1834],{"stretchy":1828},[1836,5510,1839],{"encoding":1838},[905,5512,5514],{"className":5513,"ariaHidden":1844},[1843],[905,5515,5517,5520,5523,5526,5529],{"className":5516},[1848],[905,5518],{"className":5519,"style":1853},[1852],[905,5521,1824],{"className":5522,"style":1859},[1857,1858],[905,5524,1193],{"className":5525},[1863],[905,5527,1831],{"className":5528},[1857,1867],[905,5530,1834],{"className":5531},[1871]," pour chercher",[645,5534,5535,5541,5544],{},[660,5536,5537,5538],{},"Index ",[829,5539,5540],{},"dict",[660,5542,5543],{},"par clé",[660,5545,5546,5532],{},[905,5547,5549,5568],{"className":5548},[1805],[905,5550,5552],{"className":5551},[1809],[1811,5553,5554],{"xmlns":1813},[1815,5555,5556,5566],{},[1818,5557,5558,5560,5562,5564],{},[1821,5559,1824],{"mathvariant":1823},[1826,5561,1193],{"stretchy":1828},[2025,5563,862],{},[1826,5565,1834],{"stretchy":1828},[1836,5567,3513],{"encoding":1838},[905,5569,5571],{"className":5570,"ariaHidden":1844},[1843],[905,5572,5574,5577,5580,5583,5586],{"className":5573},[1848],[905,5575],{"className":5576,"style":1853},[1852],[905,5578,1824],{"className":5579,"style":1859},[1857,1858],[905,5581,1193],{"className":5582},[1863],[905,5584,862],{"className":5585},[1857],[905,5587,1834],{"className":5588},[1871],[600,5590,5591,5592,5595],{},"L'index ne remplace pas la table — il la ",[604,5593,5594],{},"complète",". On garde la liste\npour itérer dans l'ordre, on construit un index quand on a besoin de\nrecherches répétées par clé.",[595,5597,5599],{"id":5598},"fusionner-deux-tables-par-clé-commune","Fusionner deux tables par clé commune",[2890,5601,4929],{"id":5602},"le-problème-1",[600,5604,5605],{},"Vous avez deux tables. La première liste les élèves :",[821,5607,5609],{"className":899,"code":5608,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"classe\": \"1G2\"},\n]\n",[829,5610,5611,5619,5639,5659,5679,5699],{"__ignoreMap":827},[905,5612,5613,5615,5617],{"class":907,"line":908},[905,5614,912],{"class":911},[905,5616,916],{"class":915},[905,5618,919],{"class":911},[905,5620,5621,5623,5625,5627,5629,5631,5633,5635,5637],{"class":907,"line":922},[905,5622,925],{"class":911},[905,5624,929],{"class":928},[905,5626,932],{"class":911},[905,5628,935],{"class":928},[905,5630,938],{"class":911},[905,5632,951],{"class":928},[905,5634,932],{"class":911},[905,5636,956],{"class":928},[905,5638,959],{"class":911},[905,5640,5641,5643,5645,5647,5649,5651,5653,5655,5657],{"class":907,"line":962},[905,5642,925],{"class":911},[905,5644,929],{"class":928},[905,5646,932],{"class":911},[905,5648,971],{"class":928},[905,5650,974],{"class":911},[905,5652,951],{"class":928},[905,5654,932],{"class":911},[905,5656,989],{"class":928},[905,5658,959],{"class":911},[905,5660,5661,5663,5665,5667,5669,5671,5673,5675,5677],{"class":907,"line":994},[905,5662,925],{"class":911},[905,5664,929],{"class":928},[905,5666,932],{"class":911},[905,5668,1003],{"class":928},[905,5670,938],{"class":911},[905,5672,951],{"class":928},[905,5674,932],{"class":911},[905,5676,956],{"class":928},[905,5678,959],{"class":911},[905,5680,5681,5683,5685,5687,5689,5691,5693,5695,5697],{"class":907,"line":1024},[905,5682,925],{"class":911},[905,5684,929],{"class":928},[905,5686,932],{"class":911},[905,5688,1033],{"class":928},[905,5690,840],{"class":911},[905,5692,951],{"class":928},[905,5694,932],{"class":911},[905,5696,956],{"class":928},[905,5698,959],{"class":911},[905,5700,5701],{"class":907,"line":1054},[905,5702,1088],{"class":911},[600,5704,5705],{},"La seconde liste les notes obtenues à un devoir :",[821,5707,5709],{"className":899,"code":5708,"language":901,"meta":827,"style":827},"notes = [\n    {\"nom\": \"Alice\",   \"note\": 14},\n    {\"nom\": \"Bob\",     \"note\": 11},\n    {\"nom\": \"Chloé\",   \"note\": 17},\n    {\"nom\": \"Dimitri\", \"note\": 9},\n]\n",[829,5710,5711,5720,5742,5763,5783,5803],{"__ignoreMap":827},[905,5712,5713,5716,5718],{"class":907,"line":908},[905,5714,5715],{"class":911},"notes ",[905,5717,916],{"class":915},[905,5719,919],{"class":911},[905,5721,5722,5724,5726,5728,5730,5732,5735,5737,5740],{"class":907,"line":922},[905,5723,925],{"class":911},[905,5725,929],{"class":928},[905,5727,932],{"class":911},[905,5729,935],{"class":928},[905,5731,938],{"class":911},[905,5733,5734],{"class":928},"\"note\"",[905,5736,932],{"class":911},[905,5738,5739],{"class":946},"14",[905,5741,959],{"class":911},[905,5743,5744,5746,5748,5750,5752,5754,5756,5758,5761],{"class":907,"line":962},[905,5745,925],{"class":911},[905,5747,929],{"class":928},[905,5749,932],{"class":911},[905,5751,971],{"class":928},[905,5753,974],{"class":911},[905,5755,5734],{"class":928},[905,5757,932],{"class":911},[905,5759,5760],{"class":946},"11",[905,5762,959],{"class":911},[905,5764,5765,5767,5769,5771,5773,5775,5777,5779,5781],{"class":907,"line":994},[905,5766,925],{"class":911},[905,5768,929],{"class":928},[905,5770,932],{"class":911},[905,5772,1003],{"class":928},[905,5774,938],{"class":911},[905,5776,5734],{"class":928},[905,5778,932],{"class":911},[905,5780,763],{"class":946},[905,5782,959],{"class":911},[905,5784,5785,5787,5789,5791,5793,5795,5797,5799,5801],{"class":907,"line":1024},[905,5786,925],{"class":911},[905,5788,929],{"class":928},[905,5790,932],{"class":911},[905,5792,1033],{"class":928},[905,5794,840],{"class":911},[905,5796,5734],{"class":928},[905,5798,932],{"class":911},[905,5800,3657],{"class":946},[905,5802,959],{"class":911},[905,5804,5805],{"class":907,"line":1054},[905,5806,1088],{"class":911},[600,5808,5809,5810,5813,5814,5817],{},"Question : produire une ",[604,5811,5812],{},"nouvelle table"," qui réunit nom, classe et note —\nune ligne par élève. C'est une ",[604,5815,5816],{},"fusion par clé commune"," (ici, le nom).",[2890,5819,5821],{"id":5820},"solution-naïve-double-boucle","Solution naïve : double boucle",[600,5823,5824],{},"L'approche la plus directe est de comparer chaque ligne de la première table\nà chaque ligne de la seconde :",[821,5826,5828],{"className":899,"code":5827,"language":901,"meta":827,"style":827},"fusion = []\nfor e in eleves:\n    for n in notes:\n        if e[\"nom\"] == n[\"nom\"]:\n            # On crée une ligne combinée\n            ligne = {\"nom\": e[\"nom\"], \"classe\": e[\"classe\"], \"note\": n[\"note\"]}\n            fusion.append(ligne)\n\nfor ligne in fusion:\n    print(ligne)\n",[829,5829,5830,5839,5849,5861,5882,5887,5924,5929,5933,5944],{"__ignoreMap":827},[905,5831,5832,5835,5837],{"class":907,"line":908},[905,5833,5834],{"class":911},"fusion ",[905,5836,916],{"class":915},[905,5838,1347],{"class":911},[905,5840,5841,5843,5845,5847],{"class":907,"line":922},[905,5842,1592],{"class":915},[905,5844,2920],{"class":911},[905,5846,1358],{"class":915},[905,5848,1600],{"class":911},[905,5850,5851,5853,5856,5858],{"class":907,"line":962},[905,5852,1352],{"class":915},[905,5854,5855],{"class":911}," n ",[905,5857,1358],{"class":915},[905,5859,5860],{"class":911}," notes:\n",[905,5862,5863,5866,5868,5870,5872,5874,5877,5879],{"class":907,"line":994},[905,5864,5865],{"class":915},"        if",[905,5867,2929],{"class":911},[905,5869,929],{"class":928},[905,5871,1371],{"class":911},[905,5873,2430],{"class":915},[905,5875,5876],{"class":911}," n[",[905,5878,929],{"class":928},[905,5880,5881],{"class":911},"]:\n",[905,5883,5884],{"class":907,"line":1024},[905,5885,5886],{"class":1263},"            # On crée une ligne combinée\n",[905,5888,5889,5892,5894,5897,5899,5902,5904,5906,5908,5910,5912,5914,5916,5919,5921],{"class":907,"line":1054},[905,5890,5891],{"class":911},"            ligne ",[905,5893,916],{"class":915},[905,5895,5896],{"class":911}," {",[905,5898,929],{"class":928},[905,5900,5901],{"class":911},": e[",[905,5903,929],{"class":928},[905,5905,1614],{"class":911},[905,5907,951],{"class":928},[905,5909,5901],{"class":911},[905,5911,951],{"class":928},[905,5913,1614],{"class":911},[905,5915,5734],{"class":928},[905,5917,5918],{"class":911},": n[",[905,5920,5734],{"class":928},[905,5922,5923],{"class":911},"]}\n",[905,5925,5926],{"class":907,"line":1085},[905,5927,5928],{"class":911},"            fusion.append(ligne)\n",[905,5930,5931],{"class":907,"line":1260},[905,5932,1182],{"emptyLinePlaceholder":1181},[905,5934,5935,5937,5939,5941],{"class":907,"line":1391},[905,5936,1592],{"class":915},[905,5938,1355],{"class":911},[905,5940,1358],{"class":915},[905,5942,5943],{"class":911}," fusion:\n",[905,5945,5946,5948],{"class":907,"line":1396},[905,5947,1606],{"class":946},[905,5949,5950],{"class":911},"(ligne)\n",[600,5952,2757],{},[821,5954,5957],{"className":5955,"code":5956,"language":826,"meta":827},[824],"{'nom': 'Alice', 'classe': '1G2', 'note': 14}\n{'nom': 'Bob', 'classe': '1G3', 'note': 11}\n{'nom': 'Chloé', 'classe': '1G2', 'note': 17}\n{'nom': 'Dimitri', 'classe': '1G2', 'note': 9}\n",[829,5958,5956],{"__ignoreMap":827},[832,5960,5961],{},[600,5962,5963,5964,6034],{},"Cette méthode a une complexité ",[905,5965,5967,5993],{"className":5966},[1805],[905,5968,5970],{"className":5969},[1809],[1811,5971,5972],{"xmlns":1813},[1815,5973,5974,5990],{},[1818,5975,5976,5978,5980,5982,5985,5988],{},[1821,5977,1824],{"mathvariant":1823},[1826,5979,1193],{"stretchy":1828},[1821,5981,1831],{},[1826,5983,5984],{},"×",[1821,5986,5987],{},"m",[1826,5989,1834],{"stretchy":1828},[1836,5991,5992],{"encoding":1838},"\\mathcal{O}(n \\times m)",[905,5994,5996,6022],{"className":5995,"ariaHidden":1844},[1843],[905,5997,5999,6002,6005,6008,6011,6015,6019],{"className":5998},[1848],[905,6000],{"className":6001,"style":1853},[1852],[905,6003,1824],{"className":6004,"style":1859},[1857,1858],[905,6006,1193],{"className":6007},[1863],[905,6009,1831],{"className":6010},[1857,1867],[905,6012],{"className":6013,"style":6014},[2210],"margin-right:0.2222em;",[905,6016,5984],{"className":6017},[6018],"mbin",[905,6020],{"className":6021,"style":6014},[2210],[905,6023,6025,6028,6031],{"className":6024},[1848],[905,6026],{"className":6027,"style":1853},[1852],[905,6029,5987],{"className":6030},[1857,1867],[905,6032,1834],{"className":6033},[1871]," — si chaque table\na 1 000 lignes, c'est un million de comparaisons. Acceptable pour de\npetites tables, vite catastrophique sinon.",[2890,6036,6038],{"id":6037},"solution-efficace-indexer-puis-fusionner","Solution efficace : indexer puis fusionner",[600,6040,6041,6042,6045,6046,630],{},"L'idée : ",[604,6043,6044],{},"indexer"," la seconde table par la clé commune, puis parcourir la\npremière en consultant l'index. La complexité tombe à ",[905,6047,6049,6074],{"className":6048},[1805],[905,6050,6052],{"className":6051},[1809],[1811,6053,6054],{"xmlns":1813},[1815,6055,6056,6071],{},[1818,6057,6058,6060,6062,6064,6067,6069],{},[1821,6059,1824],{"mathvariant":1823},[1826,6061,1193],{"stretchy":1828},[1821,6063,1831],{},[1826,6065,6066],{},"+",[1821,6068,5987],{},[1826,6070,1834],{"stretchy":1828},[1836,6072,6073],{"encoding":1838},"\\mathcal{O}(n + m)",[905,6075,6077,6101],{"className":6076,"ariaHidden":1844},[1843],[905,6078,6080,6083,6086,6089,6092,6095,6098],{"className":6079},[1848],[905,6081],{"className":6082,"style":1853},[1852],[905,6084,1824],{"className":6085,"style":1859},[1857,1858],[905,6087,1193],{"className":6088},[1863],[905,6090,1831],{"className":6091},[1857,1867],[905,6093],{"className":6094,"style":6014},[2210],[905,6096,6066],{"className":6097},[6018],[905,6099],{"className":6100,"style":6014},[2210],[905,6102,6104,6107,6110],{"className":6103},[1848],[905,6105],{"className":6106,"style":1853},[1852],[905,6108,5987],{"className":6109},[1857,1867],[905,6111,1834],{"className":6112},[1871],[1419,6114,6115],{},[821,6116,6118],{"className":899,"code":6117,"language":901,"meta":827,"style":827},"eleves = [\n    {\"nom\": \"Alice\",   \"classe\": \"1G2\"},\n    {\"nom\": \"Bob\",     \"classe\": \"1G3\"},\n    {\"nom\": \"Chloé\",   \"classe\": \"1G2\"},\n    {\"nom\": \"Dimitri\", \"classe\": \"1G2\"},\n]\n\nnotes = [\n    {\"nom\": \"Alice\",   \"note\": 14},\n    {\"nom\": \"Bob\",     \"note\": 11},\n    {\"nom\": \"Chloé\",   \"note\": 17},\n    {\"nom\": \"Dimitri\", \"note\": 9},\n]\n\n# 1. Indexer les notes par nom\nindex_notes = {n[\"nom\"]: n[\"note\"] for n in notes}\n\n# 2. Parcourir les élèves et chercher la note dans l'index\nfusion = []\nfor e in eleves:\n    if e[\"nom\"] in index_notes:\n        ligne = {\n            \"nom\":    e[\"nom\"],\n            \"classe\": e[\"classe\"],\n            \"note\":   index_notes[e[\"nom\"]],\n        }\n        fusion.append(ligne)\n\nfor ligne in fusion:\n    print(ligne)\n",[829,6119,6120,6128,6148,6168,6188,6208,6212,6216,6224,6244,6264,6284,6304,6308,6312,6317,6345,6350,6356,6365,6376,6392,6403,6417,6429,6443,6449,6455,6460,6471],{"__ignoreMap":827},[905,6121,6122,6124,6126],{"class":907,"line":908},[905,6123,912],{"class":911},[905,6125,916],{"class":915},[905,6127,919],{"class":911},[905,6129,6130,6132,6134,6136,6138,6140,6142,6144,6146],{"class":907,"line":922},[905,6131,925],{"class":911},[905,6133,929],{"class":928},[905,6135,932],{"class":911},[905,6137,935],{"class":928},[905,6139,938],{"class":911},[905,6141,951],{"class":928},[905,6143,932],{"class":911},[905,6145,956],{"class":928},[905,6147,959],{"class":911},[905,6149,6150,6152,6154,6156,6158,6160,6162,6164,6166],{"class":907,"line":962},[905,6151,925],{"class":911},[905,6153,929],{"class":928},[905,6155,932],{"class":911},[905,6157,971],{"class":928},[905,6159,974],{"class":911},[905,6161,951],{"class":928},[905,6163,932],{"class":911},[905,6165,989],{"class":928},[905,6167,959],{"class":911},[905,6169,6170,6172,6174,6176,6178,6180,6182,6184,6186],{"class":907,"line":994},[905,6171,925],{"class":911},[905,6173,929],{"class":928},[905,6175,932],{"class":911},[905,6177,1003],{"class":928},[905,6179,938],{"class":911},[905,6181,951],{"class":928},[905,6183,932],{"class":911},[905,6185,956],{"class":928},[905,6187,959],{"class":911},[905,6189,6190,6192,6194,6196,6198,6200,6202,6204,6206],{"class":907,"line":1024},[905,6191,925],{"class":911},[905,6193,929],{"class":928},[905,6195,932],{"class":911},[905,6197,1033],{"class":928},[905,6199,840],{"class":911},[905,6201,951],{"class":928},[905,6203,932],{"class":911},[905,6205,956],{"class":928},[905,6207,959],{"class":911},[905,6209,6210],{"class":907,"line":1054},[905,6211,1088],{"class":911},[905,6213,6214],{"class":907,"line":1085},[905,6215,1182],{"emptyLinePlaceholder":1181},[905,6217,6218,6220,6222],{"class":907,"line":1260},[905,6219,5715],{"class":911},[905,6221,916],{"class":915},[905,6223,919],{"class":911},[905,6225,6226,6228,6230,6232,6234,6236,6238,6240,6242],{"class":907,"line":1391},[905,6227,925],{"class":911},[905,6229,929],{"class":928},[905,6231,932],{"class":911},[905,6233,935],{"class":928},[905,6235,938],{"class":911},[905,6237,5734],{"class":928},[905,6239,932],{"class":911},[905,6241,5739],{"class":946},[905,6243,959],{"class":911},[905,6245,6246,6248,6250,6252,6254,6256,6258,6260,6262],{"class":907,"line":1396},[905,6247,925],{"class":911},[905,6249,929],{"class":928},[905,6251,932],{"class":911},[905,6253,971],{"class":928},[905,6255,974],{"class":911},[905,6257,5734],{"class":928},[905,6259,932],{"class":911},[905,6261,5760],{"class":946},[905,6263,959],{"class":911},[905,6265,6266,6268,6270,6272,6274,6276,6278,6280,6282],{"class":907,"line":1407},[905,6267,925],{"class":911},[905,6269,929],{"class":928},[905,6271,932],{"class":911},[905,6273,1003],{"class":928},[905,6275,938],{"class":911},[905,6277,5734],{"class":928},[905,6279,932],{"class":911},[905,6281,763],{"class":946},[905,6283,959],{"class":911},[905,6285,6286,6288,6290,6292,6294,6296,6298,6300,6302],{"class":907,"line":1578},[905,6287,925],{"class":911},[905,6289,929],{"class":928},[905,6291,932],{"class":911},[905,6293,1033],{"class":928},[905,6295,840],{"class":911},[905,6297,5734],{"class":928},[905,6299,932],{"class":911},[905,6301,3657],{"class":946},[905,6303,959],{"class":911},[905,6305,6306],{"class":907,"line":1583},[905,6307,1088],{"class":911},[905,6309,6310],{"class":907,"line":1589},[905,6311,1182],{"emptyLinePlaceholder":1181},[905,6313,6314],{"class":907,"line":1603},[905,6315,6316],{"class":1263},"# 1. Indexer les notes par nom\n",[905,6318,6319,6322,6324,6327,6329,6332,6334,6336,6338,6340,6342],{"class":907,"line":2465},[905,6320,6321],{"class":911},"index_notes ",[905,6323,916],{"class":915},[905,6325,6326],{"class":911}," {n[",[905,6328,929],{"class":928},[905,6330,6331],{"class":911},"]: n[",[905,6333,5734],{"class":928},[905,6335,1371],{"class":911},[905,6337,1592],{"class":915},[905,6339,5855],{"class":911},[905,6341,1358],{"class":915},[905,6343,6344],{"class":911}," notes}\n",[905,6346,6348],{"class":907,"line":6347},17,[905,6349,1182],{"emptyLinePlaceholder":1181},[905,6351,6353],{"class":907,"line":6352},18,[905,6354,6355],{"class":1263},"# 2. Parcourir les élèves et chercher la note dans l'index\n",[905,6357,6359,6361,6363],{"class":907,"line":6358},19,[905,6360,5834],{"class":911},[905,6362,916],{"class":915},[905,6364,1347],{"class":911},[905,6366,6368,6370,6372,6374],{"class":907,"line":6367},20,[905,6369,1592],{"class":915},[905,6371,2920],{"class":911},[905,6373,1358],{"class":915},[905,6375,1600],{"class":911},[905,6377,6379,6381,6383,6385,6387,6389],{"class":907,"line":6378},21,[905,6380,2420],{"class":915},[905,6382,2929],{"class":911},[905,6384,929],{"class":928},[905,6386,1371],{"class":911},[905,6388,1358],{"class":915},[905,6390,6391],{"class":911}," index_notes:\n",[905,6393,6395,6398,6400],{"class":907,"line":6394},22,[905,6396,6397],{"class":911},"        ligne ",[905,6399,916],{"class":915},[905,6401,6402],{"class":911}," {\n",[905,6404,6406,6409,6412,6414],{"class":907,"line":6405},23,[905,6407,6408],{"class":928},"            \"nom\"",[905,6410,6411],{"class":911},":    e[",[905,6413,929],{"class":928},[905,6415,6416],{"class":911},"],\n",[905,6418,6420,6423,6425,6427],{"class":907,"line":6419},24,[905,6421,6422],{"class":928},"            \"classe\"",[905,6424,5901],{"class":911},[905,6426,951],{"class":928},[905,6428,6416],{"class":911},[905,6430,6432,6435,6438,6440],{"class":907,"line":6431},25,[905,6433,6434],{"class":928},"            \"note\"",[905,6436,6437],{"class":911},":   index_notes[e[",[905,6439,929],{"class":928},[905,6441,6442],{"class":911},"]],\n",[905,6444,6446],{"class":907,"line":6445},26,[905,6447,6448],{"class":911},"        }\n",[905,6450,6452],{"class":907,"line":6451},27,[905,6453,6454],{"class":911},"        fusion.append(ligne)\n",[905,6456,6458],{"class":907,"line":6457},28,[905,6459,1182],{"emptyLinePlaceholder":1181},[905,6461,6463,6465,6467,6469],{"class":907,"line":6462},29,[905,6464,1592],{"class":915},[905,6466,1355],{"class":911},[905,6468,1358],{"class":915},[905,6470,5943],{"class":911},[905,6472,6474,6476],{"class":907,"line":6473},30,[905,6475,1606],{"class":946},[905,6477,5950],{"class":911},[600,6479,2757],{},[821,6481,6483],{"className":6482,"code":5956,"language":826,"meta":827},[824],[829,6484,5956],{"__ignoreMap":827},[1105,6486,6487],{},[600,6488,6489,6492,6493,6496,6497,4586,6500,6502],{},[604,6490,6491],{},"Domaine de valeurs partagé"," : la fusion par clé commune n'a de sens que\nsi les deux tables emploient le ",[604,6494,6495],{},"même domaine"," pour cette colonne. Ici,\nles noms sont écrits identiquement dans les deux tables. Une orthographe\ndivergente (",[829,6498,6499],{},"\"Chloe\"",[829,6501,1003],{},") casserait la jointure.",[595,6504,6506],{"id":6505},"gérer-les-lignes-orphelines","Gérer les lignes orphelines",[600,6508,6509,6510,6513],{},"Que faire si un élève n'a pas de note (absent au devoir) ? Le test\n",[829,6511,6512],{},"if e[\"nom\"] in index_notes"," filtre les non-correspondances. Vous pouvez\nchoisir :",[874,6515,6516,6522],{},[877,6517,6518,6521],{},[604,6519,6520],{},"Jointure interne"," : ignorer les orphelins (ce qu'on fait au-dessus).",[877,6523,6524,6527,6528,6530],{},[604,6525,6526],{},"Jointure externe gauche"," : conserver tous les élèves, marquer la note\ncomme ",[829,6529,1690],{}," quand elle manque.",[821,6532,6534],{"className":899,"code":6533,"language":901,"meta":827,"style":827},"fusion_externe = []\nfor e in eleves:\n    ligne = {\n        \"nom\":    e[\"nom\"],\n        \"classe\": e[\"classe\"],\n        \"note\":   index_notes.get(e[\"nom\"]),  # None si absent\n    }\n    fusion_externe.append(ligne)\n",[829,6535,6536,6545,6555,6564,6575,6586,6602,6607],{"__ignoreMap":827},[905,6537,6538,6541,6543],{"class":907,"line":908},[905,6539,6540],{"class":911},"fusion_externe ",[905,6542,916],{"class":915},[905,6544,1347],{"class":911},[905,6546,6547,6549,6551,6553],{"class":907,"line":922},[905,6548,1592],{"class":915},[905,6550,2920],{"class":911},[905,6552,1358],{"class":915},[905,6554,1600],{"class":911},[905,6556,6557,6560,6562],{"class":907,"line":962},[905,6558,6559],{"class":911},"    ligne ",[905,6561,916],{"class":915},[905,6563,6402],{"class":911},[905,6565,6566,6569,6571,6573],{"class":907,"line":994},[905,6567,6568],{"class":928},"        \"nom\"",[905,6570,6411],{"class":911},[905,6572,929],{"class":928},[905,6574,6416],{"class":911},[905,6576,6577,6580,6582,6584],{"class":907,"line":1024},[905,6578,6579],{"class":928},"        \"classe\"",[905,6581,5901],{"class":911},[905,6583,951],{"class":928},[905,6585,6416],{"class":911},[905,6587,6588,6591,6594,6596,6599],{"class":907,"line":1054},[905,6589,6590],{"class":928},"        \"note\"",[905,6592,6593],{"class":911},":   index_notes.get(e[",[905,6595,929],{"class":928},[905,6597,6598],{"class":911},"]),  ",[905,6600,6601],{"class":1263},"# None si absent\n",[905,6603,6604],{"class":907,"line":1085},[905,6605,6606],{"class":911},"    }\n",[905,6608,6609],{"class":907,"line":1260},[905,6610,6611],{"class":911},"    fusion_externe.append(ligne)\n",[600,6613,6614,6615,6618,6619,6621,6622,630],{},"La méthode ",[829,6616,6617],{},"dict.get(cle)"," renvoie ",[829,6620,1690],{}," si la clé n'existe pas, au lieu\nde lever ",[829,6623,6624],{},"KeyError",[860,6626,6629,6634],{"correct":862,"explanation":6627,"slug":6628},"L'indexation permet de remplacer une double boucle par un accès O(1) à la 2e table.","fusion-indexation-c2",[866,6630,6631],{"v-slot:question":827},[600,6632,6633],{},"Pourquoi indexer la 2e table avant la fusion ?",[866,6635,6636],{"v-slot:choices":827},[874,6637,6638,6641,6644],{},[877,6639,6640],{},"Pour gagner de la mémoire",[877,6642,6643],{},"Pour passer de O(n×m) à O(n+m)",[877,6645,6646],{},"Parce que sorted() le demande",[595,6648,1643],{"id":1642},[874,6650,6651,6660,6670,6685],{},[877,6652,6653,6656,6657,630],{},[604,6654,6655],{},"Clés non uniques"," : si deux lignes de la table indexée ont la même clé,\nl'index n'en garde qu'une. Si c'est gênant, construire un index\n",[829,6658,6659],{},"{cle: [liste de lignes]}",[877,6661,6662,6665,6666,6669],{},[604,6663,6664],{},"Types de clé"," : la clé de l'index doit être ",[604,6667,6668],{},"hashable"," — les chaînes,\nentiers, tuples le sont ; les listes et dictionnaires ne le sont pas.",[877,6671,6672,1113,6675,2879,6677,6680,6681,6684],{},[604,6673,6674],{},"Casse et espaces",[829,6676,935],{},[829,6678,6679],{},"\"alice \""," sont deux clés\ndifférentes. Normaliser (",[829,6682,6683],{},".strip().lower()",") avant l'indexation.",[877,6686,6687,6690,6691,630],{},[604,6688,6689],{},"Fusion sur plusieurs colonnes"," : utiliser un tuple comme clé.\n",[829,6692,6693],{},"index = {(e[\"nom\"], e[\"classe\"]): e for e in eleves}",[595,6695,1704],{"id":1703},[600,6697,6698,6699,6701,6702,6705,6706,6709],{},"Vous reverrez ces opérations dans le chapitre Bases de données\n(",[852,6700],{"code":4877}," est l'ancêtre direct de la ",[604,6703,6704],{},"jointure SQL"," que vous\nétudierez en Terminale). En attendant, vous avez tous les outils pour faire\nde l'analyse de données en Python vanilla sans ",[829,6707,6708],{},"pandas"," — lecture CSV,\nfiltrage, tri, fusion, indexation.",[1720,6711,6712],{},"html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":827,"searchDepth":922,"depth":922,"links":6714},[6715,6716,6722,6727,6728,6729],{"id":597,"depth":922,"text":598},{"id":4924,"depth":922,"text":4925,"children":6717},[6718,6719,6720,6721],{"id":4928,"depth":962,"text":4929},{"id":5082,"depth":962,"text":5083},{"id":5382,"depth":962,"text":5383},{"id":5460,"depth":962,"text":5461},{"id":5598,"depth":922,"text":5599,"children":6723},[6724,6725,6726],{"id":5602,"depth":962,"text":4929},{"id":5820,"depth":962,"text":5821},{"id":6037,"depth":962,"text":6038},{"id":6505,"depth":922,"text":6506},{"id":1642,"depth":922,"text":1643},{"id":1703,"depth":922,"text":1704},"Combiner deux tables par clé commune, indexer une table par dictionnaire pour des accès rapides.",{},[6733,6735],{"slug":5439,"kind":1740,"question":5444,"choices":6734,"correct":862,"multi":1742,"explanation":5438},[5451,5454,5457],{"slug":6628,"kind":1740,"question":6633,"choices":6736,"correct":862,"multi":1742,"explanation":6627},[6640,6643,6646],{"title":323,"description":6730},"YdDUKJlpyXuFQI-zcOeyn6LmSfHkpRsY4VSEv7AJjws",{"id":6740,"title":305,"bo":1735,"body":6741,"description":6848,"eval":1735,"extension":1736,"labo":1735,"meta":6849,"navigation":1181,"path":306,"quizzes":6851,"readingTime":908,"seo":6852,"stem":307,"tp":1735,"__hash__":6853},"cours\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F0.index.md",{"type":592,"value":6742,"toc":6844},[6743,6747,6763,6792,6796,6832],[595,6744,6746],{"id":6745},"au-programme","Au programme",[600,6748,6749,6750,6753,6754,840,6757,840,6759,6762],{},"Une ",[604,6751,6752],{},"table de données"," est un objet familier : un tableur, une feuille\nd'export d'une application, un fichier CSV téléchargé depuis un site\ngouvernemental. Derrière cette apparente simplicité se cache un modèle de\nreprésentation puissant — ",[604,6755,6756],{},"des lignes",[604,6758,610],{},[604,6760,6761],{},"des descripteurs","\n— et un petit nombre d'opérations universelles qui permettent d'en tirer de\nl'information.",[600,6764,6765,6766,6769,6770,6772,6773,6776,6777,6780,6781,6784,6785,6788,6789,6791],{},"Ce chapitre vous apprend à manipuler ces tables en ",[604,6767,6768],{},"Python vanilla",", sans\nrecourir à des bibliothèques externes type ",[829,6771,6708],{},". Vous découvrirez d'abord\ncomment ",[604,6774,6775],{},"lire un fichier CSV"," et le transformer en une structure manipulable\n— une liste de dictionnaires. Vous apprendrez ensuite à ",[604,6778,6779],{},"rechercher"," des\nlignes selon un critère, à ",[604,6782,6783],{},"trier"," la table selon une colonne, enfin à\n",[604,6786,6787],{},"fusionner"," deux tables et à les ",[604,6790,6044],{}," par clé pour accéder à une\nligne en temps constant.",[595,6793,6795],{"id":6794},"plan","Plan",[874,6797,6798,6806,6812,6823],{},[877,6799,6800,6803,6804,630],{},[604,6801,6802],{},"Cours 1 — Tables et CSV"," : format tabulaire, structure ligne\u002Fcolonne,\nlecture d'un CSV en liste de dictionnaires avec le module ",[829,6805,1149],{},[877,6807,6808,6811],{},[604,6809,6810],{},"Cours 2 — Recherche et filtrage"," : sélectionner les lignes vérifiant un\ncritère (recherche linéaire), combiner plusieurs critères en logique\npropositionnelle.",[877,6813,6814,6817,6818,2879,6820,6822],{},[604,6815,6816],{},"Cours 3 — Trier une table"," : tri par colonne avec ",[829,6819,3601],{},[829,6821,3749],{},",\ntri descendant, tri sur plusieurs critères, notion d'ordre stable.",[877,6824,6825,6828,6829,6831],{},[604,6826,6827],{},"Cours 4 — Fusion et indexation"," : jointure de deux tables par clé\ncommune, construction d'un index ",[829,6830,5540],{}," pour des accès rapides.",[600,6833,6834,6835,6837,6838,840,6840,840,6842,630],{},"Ce chapitre couvre les quatre items du programme officiel ",[852,6836],{"code":4877},",\n",[852,6839],{"code":589},[852,6841],{"code":590},[852,6843],{"code":3571},{"title":827,"searchDepth":922,"depth":922,"links":6845},[6846,6847],{"id":6745,"depth":922,"text":6746},{"id":6794,"depth":922,"text":6795},"Lire, filtrer, trier et croiser des données tabulaires en Python — du fichier CSV au dictionnaire indexé.",{"icon":6850},"i-lucide-table",[],{"title":305,"description":6848},"MRtvWbN5ESuRYChbMKSYmbJXF1sKF84QzlTRnzUxfFQ",[6855,7152,7573,7942,8441],{"id":6856,"title":6857,"bo":6858,"body":6859,"description":7145,"eval":1735,"extension":1736,"labo":1735,"meta":7146,"navigation":1742,"path":7147,"quizzes":7148,"readingTime":908,"seo":7149,"stem":7150,"tp":1735,"__hash__":7151},"coursMemo\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv.memo.md","Tables et CSV — l'essentiel",[589,590],{"type":592,"value":6860,"toc":7138},[6861,6865,6874,6878,6918,6922,6992,6996,7020,7024,7135],[595,6862,6864],{"id":6863},"en-une-phrase","En une phrase",[600,6866,6867,6870,6871,6873],{},[604,6868,6869],{},"Une table = une liste de dictionnaires",", lue depuis un CSV avec\n",[829,6872,1272],{},", descripteurs partagés par toutes les lignes.",[595,6875,6877],{"id":6876},"à-mémoriser","À mémoriser",[874,6879,6880,6886,6897,6905],{},[877,6881,6882,6885],{},[604,6883,6884],{},"Table"," : ensemble rectangulaire de lignes décrites par les mêmes\ndescripteurs (colonnes).",[877,6887,6888,6890,6891,6893,6894,6896],{},[604,6889,625],{}," : format texte, une ligne d'en-tête + une ligne par enregistrement,\nvaleurs séparées par ",[829,6892,839],{}," (ou ",[829,6895,843],{}," en France).",[877,6898,6899,1113,6902,630],{},[604,6900,6901],{},"Modèle Python retenu",[829,6903,6904],{},"[{\"col1\": v, \"col2\": w}, ...]",[877,6906,6907,6911,6912,6914,6915,630],{},[604,6908,6909],{},[829,6910,1272],{}," lit chaque ligne en ",[829,6913,5540],{}," ; toutes les valeurs sont\ndes ",[604,6916,6917],{},"chaînes",[595,6919,6921],{"id":6920},"à-savoir-reconnaître","À savoir reconnaître",[639,6923,6924,6934],{},[642,6925,6926],{},[645,6927,6928,6931],{},[648,6929,6930],{},"Situation",[648,6932,6933],{},"Action",[655,6935,6936,6947,6957,6971,6982],{},[645,6937,6938,6941],{},[660,6939,6940],{},"Fichier exporté depuis Excel français",[660,6942,6943,6944],{},"Tester ",[829,6945,6946],{},"delimiter=\";\"",[645,6948,6949,6952],{},[660,6950,6951],{},"Erreur d'encodage à la lecture",[660,6953,6954,6955],{},"Essayer ",[829,6956,1662],{},[645,6958,6959,6962],{},[660,6960,6961],{},"Calcul numérique sur une colonne",[660,6963,6964,6965,6967,6968],{},"Convertir avec ",[829,6966,4256],{}," \u002F ",[829,6969,6970],{},"float()",[645,6972,6973,6976],{},[660,6974,6975],{},"Accès à une ligne précise",[660,6977,6978,6981],{},[829,6979,6980],{},"table[i]"," (par index)",[645,6983,6984,6987],{},[660,6985,6986],{},"Accès à une cellule",[660,6988,6989],{},[829,6990,6991],{},"table[i][\"colonne\"]",[595,6993,6995],{"id":6994},"pièges-courants","Pièges courants",[874,6997,6998,7007,7014],{},[877,6999,7000,7001,7003,7004,630],{},"Toutes les valeurs lues sont des ",[604,7002,6917],{}," — ",[829,7005,7006],{},"\"16\" != 16",[877,7008,7009,7010,1687,7012,630],{},"Cellule vide → ",[829,7011,1686],{},[829,7013,1690],{},[877,7015,7016,7017,7019],{},"L'ordre des clés du ",[829,7018,5540],{}," n'est pas significatif (mais préservé en Python 3.7+).",[595,7021,7023],{"id":7022},"syntaxe-python","Syntaxe Python",[821,7025,7027],{"className":899,"code":7026,"language":901,"meta":827,"style":827},"import csv\n\nwith open(\"eleves.csv\", encoding=\"utf-8\") as f:\n    eleves = list(csv.DictReader(f))\n\n# Conversion d'une colonne numérique\nfor ligne in eleves:\n    ligne[\"age\"] = int(ligne[\"age\"])\n\n# Accès\nprint(eleves[0][\"nom\"])\n",[829,7028,7029,7035,7039,7063,7074,7078,7083,7093,7112,7116,7121],{"__ignoreMap":827},[905,7030,7031,7033],{"class":907,"line":908},[905,7032,1173],{"class":915},[905,7034,1176],{"class":911},[905,7036,7037],{"class":907,"line":922},[905,7038,1182],{"emptyLinePlaceholder":1181},[905,7040,7041,7043,7045,7047,7049,7051,7053,7055,7057,7059,7061],{"class":907,"line":962},[905,7042,1187],{"class":915},[905,7044,1190],{"class":946},[905,7046,1193],{"class":911},[905,7048,1196],{"class":928},[905,7050,840],{"class":911},[905,7052,1202],{"class":1201},[905,7054,916],{"class":915},[905,7056,1207],{"class":928},[905,7058,1210],{"class":911},[905,7060,1213],{"class":915},[905,7062,1216],{"class":911},[905,7064,7065,7067,7069,7071],{"class":907,"line":994},[905,7066,1231],{"class":911},[905,7068,916],{"class":915},[905,7070,1236],{"class":946},[905,7072,7073],{"class":911},"(csv.DictReader(f))\n",[905,7075,7076],{"class":907,"line":1024},[905,7077,1182],{"emptyLinePlaceholder":1181},[905,7079,7080],{"class":907,"line":1054},[905,7081,7082],{"class":1263},"# Conversion d'une colonne numérique\n",[905,7084,7085,7087,7089,7091],{"class":907,"line":1085},[905,7086,1592],{"class":915},[905,7088,1355],{"class":911},[905,7090,1358],{"class":915},[905,7092,1600],{"class":911},[905,7094,7095,7098,7100,7102,7104,7106,7108,7110],{"class":907,"line":1260},[905,7096,7097],{"class":911},"    ligne[",[905,7099,941],{"class":928},[905,7101,1371],{"class":911},[905,7103,916],{"class":915},[905,7105,1376],{"class":946},[905,7107,1379],{"class":911},[905,7109,941],{"class":928},[905,7111,1257],{"class":911},[905,7113,7114],{"class":907,"line":1391},[905,7115,1182],{"emptyLinePlaceholder":1181},[905,7117,7118],{"class":907,"line":1396},[905,7119,7120],{"class":1263},"# Accès\n",[905,7122,7123,7125,7127,7129,7131,7133],{"class":907,"line":1407},[905,7124,1248],{"class":946},[905,7126,1251],{"class":911},[905,7128,1254],{"class":946},[905,7130,1571],{"class":911},[905,7132,929],{"class":928},[905,7134,1257],{"class":911},[1720,7136,7137],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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":827,"searchDepth":922,"depth":922,"links":7139},[7140,7141,7142,7143,7144],{"id":6863,"depth":922,"text":6864},{"id":6876,"depth":922,"text":6877},{"id":6920,"depth":922,"text":6921},{"id":6994,"depth":922,"text":6995},{"id":7022,"depth":922,"text":7023},"Mémo de révision sur le format CSV et la liste de dictionnaires.",{},"\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftables-csv.memo",[],{"title":6857,"description":7145},"1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv.memo","nk_Zu0WxR2C6soPdluZcX47aZ2uO_aEKqs4a5kfV9Zw",{"id":7153,"title":7154,"bo":7155,"body":7156,"description":7566,"eval":1735,"extension":1736,"labo":1735,"meta":7567,"navigation":1742,"path":7568,"quizzes":7569,"readingTime":908,"seo":7570,"stem":7571,"tp":1735,"__hash__":7572},"coursMemo\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche.memo.md","Recherche et filtrage — l'essentiel",[590],{"type":592,"value":7157,"toc":7559},[7158,7160,7216,7218,7300,7302,7362,7364,7399,7401,7556],[595,7159,6864],{"id":6863},[600,7161,7162,7165,7166,840,7168,840,7170,7172,7173,630],{},[604,7163,7164],{},"Filtrer une table = parcourir et garder les lignes vérifiant un critère",",\ncombinable avec ",[829,7167,2873],{},[829,7169,2878],{},[829,7171,2884],{},". Coût : ",[905,7174,7176,7195],{"className":7175},[1805],[905,7177,7179],{"className":7178},[1809],[1811,7180,7181],{"xmlns":1813},[1815,7182,7183,7193],{},[1818,7184,7185,7187,7189,7191],{},[1821,7186,1824],{"mathvariant":1823},[1826,7188,1193],{"stretchy":1828},[1821,7190,1831],{},[1826,7192,1834],{"stretchy":1828},[1836,7194,1839],{"encoding":1838},[905,7196,7198],{"className":7197,"ariaHidden":1844},[1843],[905,7199,7201,7204,7207,7210,7213],{"className":7200},[1848],[905,7202],{"className":7203,"style":1853},[1852],[905,7205,1824],{"className":7206,"style":1859},[1857,1858],[905,7208,1193],{"className":7209},[1863],[905,7211,1831],{"className":7212},[1857,1867],[905,7214,1834],{"className":7215},[1871],[595,7217,6877],{"id":6876},[874,7219,7220,7269,7280,7288],{},[877,7221,7222,7225,7226,630],{},[604,7223,7224],{},"Recherche linéaire"," : parcours ligne par ligne, complexité\n",[905,7227,7229,7248],{"className":7228},[1805],[905,7230,7232],{"className":7231},[1809],[1811,7233,7234],{"xmlns":1813},[1815,7235,7236,7246],{},[1818,7237,7238,7240,7242,7244],{},[1821,7239,1824],{"mathvariant":1823},[1826,7241,1193],{"stretchy":1828},[1821,7243,1831],{},[1826,7245,1834],{"stretchy":1828},[1836,7247,1839],{"encoding":1838},[905,7249,7251],{"className":7250,"ariaHidden":1844},[1843],[905,7252,7254,7257,7260,7263,7266],{"className":7253},[1848],[905,7255],{"className":7256,"style":1853},[1852],[905,7258,1824],{"className":7259,"style":1859},[1857,1858],[905,7261,1193],{"className":7262},[1863],[905,7264,1831],{"className":7265},[1857,1867],[905,7267,1834],{"className":7268},[1871],[877,7270,7271,7274,7275,7277,7278,630],{},[604,7272,7273],{},"Première occurrence"," : boucle ",[829,7276,1592],{}," + ",[829,7279,2474],{},[877,7281,7282,7285,7286,630],{},[604,7283,7284],{},"Toutes les occurrences"," : compréhension de liste avec ",[829,7287,2799],{},[877,7289,7290,1113,7293,840,7295,840,7297,7299],{},[604,7291,7292],{},"Critères composés",[829,7294,2873],{},[829,7296,2878],{},[829,7298,2884],{}," — logique propositionnelle.",[595,7301,6921],{"id":6920},[639,7303,7304,7312],{},[642,7305,7306],{},[645,7307,7308,7310],{},[648,7309,6930],{},[648,7311,6933],{},[655,7313,7314,7325,7333,7344,7353],{},[645,7315,7316,7319],{},[660,7317,7318],{},"« Trouver l'élève dont… »",[660,7320,7321,7322,7324],{},"Recherche d'une seule ligne, ",[829,7323,2474],{}," après match",[645,7326,7327,7330],{},[660,7328,7329],{},"« Tous les élèves qui… »",[660,7331,7332],{},"Filtrage, compréhension de liste",[645,7334,7335,7338],{},[660,7336,7337],{},"« Quels doublons sur le nom ? »",[660,7339,7340,7341],{},"Boucle + liste des ",[829,7342,7343],{},"noms_vus",[645,7345,7346,7349],{},[660,7347,7348],{},"Plusieurs conditions cumulatives",[660,7350,7351],{},[829,7352,2873],{},[645,7354,7355,7358],{},[660,7356,7357],{},"Plusieurs conditions alternatives",[660,7359,7360],{},[829,7361,2878],{},[595,7363,6995],{"id":6994},[874,7365,7366,7379,7388],{},[877,7367,7368,7369,7371,7372,7374,7375,7378],{},"Comparer une chaîne ",[829,7370,4244],{}," à un entier ",[829,7373,763],{}," → ",[829,7376,7377],{},"False"," sans erreur.",[877,7380,7381,7382,7385,7386,630],{},"Si la colonne n'a pas été convertie : ",[829,7383,7384],{},"int(e[\"age\"]) >= 17"," plutôt que\n",[829,7387,3391],{},[877,7389,7390,7391,7393,7394,7393,7396,7398],{},"Priorité : ",[829,7392,2884],{}," > ",[829,7395,2873],{},[829,7397,2878],{},". Parenthéser au moindre doute.",[595,7400,7023],{"id":7022},[821,7402,7404],{"className":899,"code":7403,"language":901,"meta":827,"style":827},"# Première ligne correspondante\ntrouve = None\nfor e in table:\n    if e[\"nom\"] == \"Chloé\":\n        trouve = e\n        break\n\n# Toutes les lignes correspondantes\nfiltree = [e for e in table if e[\"classe\"] == \"1G2\"]\n\n# Critère composé\nselection = [e for e in table\n             if e[\"classe\"] == \"1G2\" and e[\"age\"] == 16]\n",[829,7405,7406,7411,7420,7431,7447,7456,7460,7464,7469,7501,7505,7510,7527],{"__ignoreMap":827},[905,7407,7408],{"class":907,"line":908},[905,7409,7410],{"class":1263},"# Première ligne correspondante\n",[905,7412,7413,7416,7418],{"class":907,"line":922},[905,7414,7415],{"class":911},"trouve ",[905,7417,916],{"class":915},[905,7419,2405],{"class":946},[905,7421,7422,7424,7426,7428],{"class":907,"line":962},[905,7423,1592],{"class":915},[905,7425,2920],{"class":911},[905,7427,1358],{"class":915},[905,7429,7430],{"class":911}," table:\n",[905,7432,7433,7435,7437,7439,7441,7443,7445],{"class":907,"line":994},[905,7434,2420],{"class":915},[905,7436,2929],{"class":911},[905,7438,929],{"class":928},[905,7440,1371],{"class":911},[905,7442,2430],{"class":915},[905,7444,2433],{"class":928},[905,7446,2436],{"class":911},[905,7448,7449,7452,7454],{"class":907,"line":1024},[905,7450,7451],{"class":911},"        trouve ",[905,7453,916],{"class":915},[905,7455,5316],{"class":911},[905,7457,7458],{"class":907,"line":1054},[905,7459,2451],{"class":915},[905,7461,7462],{"class":907,"line":1085},[905,7463,1182],{"emptyLinePlaceholder":1181},[905,7465,7466],{"class":907,"line":1260},[905,7467,7468],{"class":1263},"# Toutes les lignes correspondantes\n",[905,7470,7471,7474,7476,7478,7480,7482,7484,7487,7489,7491,7493,7495,7497,7499],{"class":907,"line":1391},[905,7472,7473],{"class":911},"filtree ",[905,7475,916],{"class":915},[905,7477,2915],{"class":911},[905,7479,1592],{"class":915},[905,7481,2920],{"class":911},[905,7483,1358],{"class":915},[905,7485,7486],{"class":911}," table ",[905,7488,2799],{"class":915},[905,7490,2929],{"class":911},[905,7492,951],{"class":928},[905,7494,1371],{"class":911},[905,7496,2430],{"class":915},[905,7498,2722],{"class":928},[905,7500,1088],{"class":911},[905,7502,7503],{"class":907,"line":1396},[905,7504,1182],{"emptyLinePlaceholder":1181},[905,7506,7507],{"class":907,"line":1407},[905,7508,7509],{"class":1263},"# Critère composé\n",[905,7511,7512,7514,7516,7518,7520,7522,7524],{"class":907,"line":1578},[905,7513,2910],{"class":911},[905,7515,916],{"class":915},[905,7517,2915],{"class":911},[905,7519,1592],{"class":915},[905,7521,2920],{"class":911},[905,7523,1358],{"class":915},[905,7525,7526],{"class":911}," table\n",[905,7528,7529,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554],{"class":907,"line":1583},[905,7530,7531],{"class":915},"             if",[905,7533,2929],{"class":911},[905,7535,951],{"class":928},[905,7537,1371],{"class":911},[905,7539,2430],{"class":915},[905,7541,2722],{"class":928},[905,7543,2940],{"class":915},[905,7545,2929],{"class":911},[905,7547,941],{"class":928},[905,7549,1371],{"class":911},[905,7551,2430],{"class":915},[905,7553,2951],{"class":946},[905,7555,1088],{"class":911},[1720,7557,7558],{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":827,"searchDepth":922,"depth":922,"links":7560},[7561,7562,7563,7564,7565],{"id":6863,"depth":922,"text":6864},{"id":6876,"depth":922,"text":6877},{"id":6920,"depth":922,"text":6921},{"id":6994,"depth":922,"text":6995},{"id":7022,"depth":922,"text":7023},"Mémo de révision sur la recherche linéaire dans une table.",{},"\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Frecherche.memo",[],{"title":7154,"description":7566},"1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche.memo","jIaH67l-VOJTvr7Qb7HJLnGufF9z8pM1WHvBoHDxgBU",{"id":7574,"title":7575,"bo":7576,"body":7577,"description":7935,"eval":1735,"extension":1736,"labo":1735,"meta":7936,"navigation":1742,"path":7937,"quizzes":7938,"readingTime":908,"seo":7939,"stem":7940,"tp":1735,"__hash__":7941},"coursMemo\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri.memo.md","Trier une table — l'essentiel",[3571],{"type":592,"value":7578,"toc":7928},[7579,7581,7653,7655,7701,7703,7765,7767,7797,7799,7925],[595,7580,6864],{"id":6863},[600,7582,7583,7589,7590,630],{},[604,7584,7585,7586],{},"Trier une table = ",[829,7587,7588],{},"sorted(table, key=lambda e: e[\"colonne\"])",", tri stable\nen ",[905,7591,7593,7618],{"className":7592},[1805],[905,7594,7596],{"className":7595},[1809],[1811,7597,7598],{"xmlns":1813},[1815,7599,7600,7616],{},[1818,7601,7602,7604,7606,7608,7610,7612,7614],{},[1821,7603,1824],{"mathvariant":1823},[1826,7605,1193],{"stretchy":1828},[1821,7607,1831],{},[1821,7609,2172],{},[1826,7611,2175],{},[1821,7613,1831],{},[1826,7615,1834],{"stretchy":1828},[1836,7617,4810],{"encoding":1838},[905,7619,7621],{"className":7620,"ariaHidden":1844},[1843],[905,7622,7624,7627,7630,7633,7636,7639,7644,7647,7650],{"className":7623},[1848],[905,7625],{"className":7626,"style":1853},[1852],[905,7628,1824],{"className":7629,"style":1859},[1857,1858],[905,7631,1193],{"className":7632},[1863],[905,7634,1831],{"className":7635},[1857,1867],[905,7637],{"className":7638,"style":2211},[2210],[905,7640,2202,7642],{"className":7641},[2201],[905,7643,2206],{"style":2205},[905,7645],{"className":7646,"style":2211},[2210],[905,7648,1831],{"className":7649},[1857,1867],[905,7651,1834],{"className":7652},[1871],[595,7654,6877],{"id":6876},[874,7656,7657,7667,7680,7688,7695],{},[877,7658,7659,7663,7664,7666],{},[604,7660,7661],{},[829,7662,3613],{}," retourne une ",[604,7665,3617],{}," triée.",[877,7668,7669,7673,7674,7677,7678,630],{},[604,7670,7671],{},[829,7672,3699],{}," trie ",[604,7675,7676],{},"en place",", retourne ",[829,7679,1690],{},[877,7681,7682,7687],{},[604,7683,7684],{},[829,7685,7686],{},"key=fonction"," indique selon quoi comparer.",[877,7689,7690,7694],{},[604,7691,7692],{},[829,7693,4270],{}," inverse l'ordre.",[877,7696,7697,7700],{},[604,7698,7699],{},"Tri stable"," : les égalités préservent l'ordre d'origine.",[595,7702,6921],{"id":6920},[639,7704,7705,7713],{},[642,7706,7707],{},[645,7708,7709,7711],{},[648,7710,6930],{},[648,7712,6933],{},[655,7714,7715,7725,7734,7743,7756],{},[645,7716,7717,7720],{},[660,7718,7719],{},"Tri alphabétique par nom",[660,7721,7722],{},[829,7723,7724],{},"key=lambda e: e[\"nom\"]",[645,7726,7727,7729],{},[660,7728,4264],{},[660,7730,7731,7732],{},"ajouter ",[829,7733,4270],{},[645,7735,7736,7739],{},[660,7737,7738],{},"Tri sur colonne stockée en chaîne",[660,7740,7741],{},[829,7742,4260],{},[645,7744,7745,7748],{},[660,7746,7747],{},"Tri multi-critères",[660,7749,7750,7751,1113,7753],{},"clé ",[829,7752,4534],{},[829,7754,7755],{},"key=lambda e: (e[\"classe\"], e[\"nom\"])",[645,7757,7758,7761],{},[660,7759,7760],{},"Tri insensible à la casse",[660,7762,7763],{},[829,7764,4769],{},[595,7766,6995],{"id":6994},[874,7768,7769,7780,7785,7794],{},[877,7770,7771,7773,7774,840,7776,7779],{},[829,7772,3699],{}," retourne ",[829,7775,1690],{},[604,7777,7778],{},"pas"," la liste triée.",[877,7781,7782,7783,630],{},"Tri lexicographique sur des chaînes numériques : ",[829,7784,4252],{},[877,7786,7787,7788,7790,7791,7793],{},"Erreur ",[829,7789,3395],{}," si la liste contient ",[829,7792,1690],{}," ou des types mixtes.",[877,7795,7796],{},"Caractères accentués mal classés (problème de locale, hors programme).",[595,7798,7023],{"id":7022},[821,7800,7802],{"className":899,"code":7801,"language":901,"meta":827,"style":827},"# Tri ascendant par colonne\npar_nom = sorted(eleves, key=lambda e: e[\"nom\"])\n\n# Tri descendant\npar_age_desc = sorted(eleves, key=lambda e: e[\"age\"], reverse=True)\n\n# Tri multi-critères (classe puis nom)\ntrie = sorted(eleves, key=lambda e: (e[\"classe\"], e[\"nom\"]))\n\n# Tri en place\neleves.sort(key=lambda e: e[\"nom\"])\n",[829,7803,7804,7809,7829,7833,7838,7866,7870,7875,7901,7905,7910],{"__ignoreMap":827},[905,7805,7806],{"class":907,"line":908},[905,7807,7808],{"class":1263},"# Tri ascendant par colonne\n",[905,7810,7811,7813,7815,7817,7819,7821,7823,7825,7827],{"class":907,"line":922},[905,7812,3942],{"class":911},[905,7814,916],{"class":915},[905,7816,3947],{"class":946},[905,7818,3950],{"class":911},[905,7820,3953],{"class":1201},[905,7822,3956],{"class":915},[905,7824,3959],{"class":911},[905,7826,929],{"class":928},[905,7828,1257],{"class":911},[905,7830,7831],{"class":907,"line":962},[905,7832,1182],{"emptyLinePlaceholder":1181},[905,7834,7835],{"class":907,"line":994},[905,7836,7837],{"class":1263},"# Tri descendant\n",[905,7839,7840,7842,7844,7846,7848,7850,7852,7854,7856,7858,7860,7862,7864],{"class":907,"line":1024},[905,7841,4280],{"class":911},[905,7843,916],{"class":915},[905,7845,3947],{"class":946},[905,7847,3950],{"class":911},[905,7849,3953],{"class":1201},[905,7851,3956],{"class":915},[905,7853,3959],{"class":911},[905,7855,941],{"class":928},[905,7857,1614],{"class":911},[905,7859,4299],{"class":1201},[905,7861,916],{"class":915},[905,7863,4304],{"class":946},[905,7865,1630],{"class":911},[905,7867,7868],{"class":907,"line":1054},[905,7869,1182],{"emptyLinePlaceholder":1181},[905,7871,7872],{"class":907,"line":1085},[905,7873,7874],{"class":1263},"# Tri multi-critères (classe puis nom)\n",[905,7876,7877,7880,7882,7884,7886,7888,7890,7892,7894,7896,7898],{"class":907,"line":1260},[905,7878,7879],{"class":911},"trie ",[905,7881,916],{"class":915},[905,7883,3947],{"class":946},[905,7885,3950],{"class":911},[905,7887,3953],{"class":1201},[905,7889,3956],{"class":915},[905,7891,4566],{"class":911},[905,7893,951],{"class":928},[905,7895,2980],{"class":911},[905,7897,929],{"class":928},[905,7899,7900],{"class":911},"]))\n",[905,7902,7903],{"class":907,"line":1391},[905,7904,1182],{"emptyLinePlaceholder":1181},[905,7906,7907],{"class":907,"line":1396},[905,7908,7909],{"class":1263},"# Tri en place\n",[905,7911,7912,7915,7917,7919,7921,7923],{"class":907,"line":1407},[905,7913,7914],{"class":911},"eleves.sort(",[905,7916,3953],{"class":1201},[905,7918,3956],{"class":915},[905,7920,3959],{"class":911},[905,7922,929],{"class":928},[905,7924,1257],{"class":911},[1720,7926,7927],{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":827,"searchDepth":922,"depth":922,"links":7929},[7930,7931,7932,7933,7934],{"id":6863,"depth":922,"text":6864},{"id":6876,"depth":922,"text":6877},{"id":6920,"depth":922,"text":6921},{"id":6994,"depth":922,"text":6995},{"id":7022,"depth":922,"text":7023},"Mémo de révision sur sorted() et le tri par colonne.",{},"\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftri.memo",[],{"title":7575,"description":7935},"1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri.memo","pv9FhDJUNeQH0FxR5qYBjGPNXyFM41DtE-ilR_2uF3g",{"id":7943,"title":7944,"bo":7945,"body":7946,"description":8434,"eval":1735,"extension":1736,"labo":1735,"meta":8435,"navigation":1742,"path":8436,"quizzes":8437,"readingTime":908,"seo":8438,"stem":8439,"tp":1735,"__hash__":8440},"coursMemo\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation.memo.md","Fusion et indexation — l'essentiel",[4877,589],{"type":592,"value":7947,"toc":8427},[7948,7950,8137,8139,8169,8171,8223,8225,8247,8249,8424],[595,7949,6864],{"id":6863},[600,7951,7952,7958,7959,8002,8003,8006,8007,5093,8072,630],{},[604,7953,7954,7955],{},"Indexer = ",[829,7956,7957],{},"{e[\"cle\"]: e for e in table}"," pour des accès en\n",[905,7960,7962,7981],{"className":7961},[1805],[905,7963,7965],{"className":7964},[1809],[1811,7966,7967],{"xmlns":1813},[1815,7968,7969,7979],{},[1818,7970,7971,7973,7975,7977],{},[1821,7972,1824],{"mathvariant":1823},[1826,7974,1193],{"stretchy":1828},[2025,7976,862],{},[1826,7978,1834],{"stretchy":1828},[1836,7980,3513],{"encoding":1838},[905,7982,7984],{"className":7983,"ariaHidden":1844},[1843],[905,7985,7987,7990,7993,7996,7999],{"className":7986},[1848],[905,7988],{"className":7989,"style":1853},[1852],[905,7991,1824],{"className":7992,"style":1859},[1857,1858],[905,7994,1193],{"className":7995},[1863],[905,7997,862],{"className":7998},[1857],[905,8000,1834],{"className":8001},[1871]," ; ",[604,8004,8005],{},"fusionner = indexer puis parcourir"," pour passer de\n",[905,8008,8010,8033],{"className":8009},[1805],[905,8011,8013],{"className":8012},[1809],[1811,8014,8015],{"xmlns":1813},[1815,8016,8017,8031],{},[1818,8018,8019,8021,8023,8025,8027,8029],{},[1821,8020,1824],{"mathvariant":1823},[1826,8022,1193],{"stretchy":1828},[1821,8024,1831],{},[1826,8026,5984],{},[1821,8028,5987],{},[1826,8030,1834],{"stretchy":1828},[1836,8032,5992],{"encoding":1838},[905,8034,8036,8060],{"className":8035,"ariaHidden":1844},[1843],[905,8037,8039,8042,8045,8048,8051,8054,8057],{"className":8038},[1848],[905,8040],{"className":8041,"style":1853},[1852],[905,8043,1824],{"className":8044,"style":1859},[1857,1858],[905,8046,1193],{"className":8047},[1863],[905,8049,1831],{"className":8050},[1857,1867],[905,8052],{"className":8053,"style":6014},[2210],[905,8055,5984],{"className":8056},[6018],[905,8058],{"className":8059,"style":6014},[2210],[905,8061,8063,8066,8069],{"className":8062},[1848],[905,8064],{"className":8065,"style":1853},[1852],[905,8067,5987],{"className":8068},[1857,1867],[905,8070,1834],{"className":8071},[1871],[905,8073,8075,8098],{"className":8074},[1805],[905,8076,8078],{"className":8077},[1809],[1811,8079,8080],{"xmlns":1813},[1815,8081,8082,8096],{},[1818,8083,8084,8086,8088,8090,8092,8094],{},[1821,8085,1824],{"mathvariant":1823},[1826,8087,1193],{"stretchy":1828},[1821,8089,1831],{},[1826,8091,6066],{},[1821,8093,5987],{},[1826,8095,1834],{"stretchy":1828},[1836,8097,6073],{"encoding":1838},[905,8099,8101,8125],{"className":8100,"ariaHidden":1844},[1843],[905,8102,8104,8107,8110,8113,8116,8119,8122],{"className":8103},[1848],[905,8105],{"className":8106,"style":1853},[1852],[905,8108,1824],{"className":8109,"style":1859},[1857,1858],[905,8111,1193],{"className":8112},[1863],[905,8114,1831],{"className":8115},[1857,1867],[905,8117],{"className":8118,"style":6014},[2210],[905,8120,6066],{"className":8121},[6018],[905,8123],{"className":8124,"style":6014},[2210],[905,8126,8128,8131,8134],{"className":8127},[1848],[905,8129],{"className":8130,"style":1853},[1852],[905,8132,5987],{"className":8133},[1857,1867],[905,8135,1834],{"className":8136},[1871],[595,8138,6877],{"id":6876},[874,8140,8141,8149,8155,8161],{},[877,8142,8143,1113,8146,8148],{},[604,8144,8145],{},"Index par clé",[829,8147,5540],{}," qui associe une valeur de colonne à la ligne\ncomplète.",[877,8150,8151,8154],{},[604,8152,8153],{},"La clé doit être unique"," dans la table indexée (sinon écrasement).",[877,8156,8157,8160],{},[604,8158,8159],{},"Fusion par clé commune"," : indexer la 2e table, parcourir la 1re, lookup.",[877,8162,8163,4586,8165,8168],{},[604,8164,6520],{},[604,8166,8167],{},"jointure externe"," : ignorer ou conserver les\norphelins.",[595,8170,6921],{"id":6920},[639,8172,8173,8181],{},[642,8174,8175],{},[645,8176,8177,8179],{},[648,8178,6930],{},[648,8180,6933],{},[655,8182,8183,8193,8201,8212],{},[645,8184,8185,8188],{},[660,8186,8187],{},"Recherches fréquentes par même clé",[660,8189,8190,8191],{},"Construire un index ",[829,8192,5540],{},[645,8194,8195,8198],{},[660,8196,8197],{},"Croiser deux tables",[660,8199,8200],{},"Indexer la plus petite, parcourir l'autre",[645,8202,8203,8206],{},[660,8204,8205],{},"Élèves sans note",[660,8207,8208,8209],{},"Jointure externe avec ",[829,8210,8211],{},"index.get(cle)",[645,8213,8214,8217],{},[660,8215,8216],{},"Clés composées",[660,8218,8219,8220],{},"Index avec tuple : ",[829,8221,8222],{},"{(c1, c2): ligne, ...}",[595,8224,6995],{"id":6994},[874,8226,8227,8230,8233,8244],{},[877,8228,8229],{},"Clés non uniques → écrasement silencieux.",[877,8231,8232],{},"Casse \u002F espaces \u002F accents incohérents entre tables.",[877,8234,8235,4754,8238,8240,8241,8243],{},[829,8236,8237],{},"index[cle]",[829,8239,6624],{}," ; préférer ",[829,8242,8211],{}," si la clé peut\nmanquer.",[877,8245,8246],{},"Clés non hashables (liste, dict) interdites.",[595,8248,7023],{"id":7022},[821,8250,8252],{"className":899,"code":8251,"language":901,"meta":827,"style":827},"# Indexation par clé unique\nindex = {e[\"nom\"]: e for e in eleves}\nprint(index[\"Chloé\"][\"classe\"])\n\n# Fusion par clé commune (jointure interne)\nindex_notes = {n[\"nom\"]: n[\"note\"] for n in notes}\nfusion = []\nfor e in eleves:\n    if e[\"nom\"] in index_notes:\n        fusion.append({\n            \"nom\": e[\"nom\"],\n            \"classe\": e[\"classe\"],\n            \"note\": index_notes[e[\"nom\"]],\n        })\n\n# Jointure externe (None si absent)\nnote = index_notes.get(e[\"nom\"])\n",[829,8253,8254,8259,8280,8295,8299,8304,8328,8336,8346,8360,8365,8375,8385,8396,8401,8405,8410],{"__ignoreMap":827},[905,8255,8256],{"class":907,"line":908},[905,8257,8258],{"class":1263},"# Indexation par clé unique\n",[905,8260,8261,8264,8266,8268,8270,8272,8274,8276,8278],{"class":907,"line":922},[905,8262,8263],{"class":911},"index ",[905,8265,916],{"class":915},[905,8267,5400],{"class":911},[905,8269,929],{"class":928},[905,8271,5405],{"class":911},[905,8273,1592],{"class":915},[905,8275,2920],{"class":911},[905,8277,1358],{"class":915},[905,8279,5414],{"class":911},[905,8281,8282,8284,8287,8289,8291,8293],{"class":907,"line":962},[905,8283,1248],{"class":946},[905,8285,8286],{"class":911},"(index[",[905,8288,1003],{"class":928},[905,8290,1571],{"class":911},[905,8292,951],{"class":928},[905,8294,1257],{"class":911},[905,8296,8297],{"class":907,"line":994},[905,8298,1182],{"emptyLinePlaceholder":1181},[905,8300,8301],{"class":907,"line":1024},[905,8302,8303],{"class":1263},"# Fusion par clé commune (jointure interne)\n",[905,8305,8306,8308,8310,8312,8314,8316,8318,8320,8322,8324,8326],{"class":907,"line":1054},[905,8307,6321],{"class":911},[905,8309,916],{"class":915},[905,8311,6326],{"class":911},[905,8313,929],{"class":928},[905,8315,6331],{"class":911},[905,8317,5734],{"class":928},[905,8319,1371],{"class":911},[905,8321,1592],{"class":915},[905,8323,5855],{"class":911},[905,8325,1358],{"class":915},[905,8327,6344],{"class":911},[905,8329,8330,8332,8334],{"class":907,"line":1085},[905,8331,5834],{"class":911},[905,8333,916],{"class":915},[905,8335,1347],{"class":911},[905,8337,8338,8340,8342,8344],{"class":907,"line":1260},[905,8339,1592],{"class":915},[905,8341,2920],{"class":911},[905,8343,1358],{"class":915},[905,8345,1600],{"class":911},[905,8347,8348,8350,8352,8354,8356,8358],{"class":907,"line":1391},[905,8349,2420],{"class":915},[905,8351,2929],{"class":911},[905,8353,929],{"class":928},[905,8355,1371],{"class":911},[905,8357,1358],{"class":915},[905,8359,6391],{"class":911},[905,8361,8362],{"class":907,"line":1396},[905,8363,8364],{"class":911},"        fusion.append({\n",[905,8366,8367,8369,8371,8373],{"class":907,"line":1407},[905,8368,6408],{"class":928},[905,8370,5901],{"class":911},[905,8372,929],{"class":928},[905,8374,6416],{"class":911},[905,8376,8377,8379,8381,8383],{"class":907,"line":1578},[905,8378,6422],{"class":928},[905,8380,5901],{"class":911},[905,8382,951],{"class":928},[905,8384,6416],{"class":911},[905,8386,8387,8389,8392,8394],{"class":907,"line":1583},[905,8388,6434],{"class":928},[905,8390,8391],{"class":911},": index_notes[e[",[905,8393,929],{"class":928},[905,8395,6442],{"class":911},[905,8397,8398],{"class":907,"line":1589},[905,8399,8400],{"class":911},"        })\n",[905,8402,8403],{"class":907,"line":1603},[905,8404,1182],{"emptyLinePlaceholder":1181},[905,8406,8407],{"class":907,"line":2465},[905,8408,8409],{"class":1263},"# Jointure externe (None si absent)\n",[905,8411,8412,8415,8417,8420,8422],{"class":907,"line":6347},[905,8413,8414],{"class":911},"note ",[905,8416,916],{"class":915},[905,8418,8419],{"class":911}," index_notes.get(e[",[905,8421,929],{"class":928},[905,8423,1257],{"class":911},[1720,8425,8426],{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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":827,"searchDepth":922,"depth":922,"links":8428},[8429,8430,8431,8432,8433],{"id":6863,"depth":922,"text":6864},{"id":6876,"depth":922,"text":6877},{"id":6920,"depth":922,"text":6921},{"id":6994,"depth":922,"text":6995},{"id":7022,"depth":922,"text":7023},"Mémo de révision sur la jointure par clé commune et l'index par dictionnaire.",{},"\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ffusion-indexation.memo",[],{"title":7944,"description":8434},"1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation.memo","hvsy3gLnkmkSM_u_LIFxw_iqVGI3UsW-JEAUWr8pj_Y",{"id":8442,"title":8443,"bo":8444,"body":8445,"description":9419,"eval":1735,"extension":1736,"labo":1735,"meta":9420,"navigation":1742,"path":9422,"quizzes":9423,"readingTime":908,"seo":9453,"stem":9454,"tp":1735,"__hash__":9455},"coursMemo\u002F1.nsi-1ere\u002Fpd-tables-donnees\u002Fchapitre.memo.md","Traitement de données en tables — synthèse",[4877,589,590,3571],{"type":592,"value":8446,"toc":9414},[8447,8451,8461,8476,8543,8559,8708,8715,8719,8797,8802,8925,8929,8953,8994,9030,9055,9067,9075,9386],[595,8448,8450],{"id":8449},"vue-densemble","Vue d'ensemble",[600,8452,8453,8454,8457,8458,8460],{},"Ce chapitre vous a fait découvrir le ",[604,8455,8456],{},"traitement de données en tables"," en\nPython vanilla. Vous êtes parti d'une représentation naturelle des données\ntabulaires — la ",[604,8459,895],{}," — et vous avez progressivement\nconstruit les opérations qui font de cette représentation un véritable outil\nd'analyse.",[600,8462,8463,8464,8467,8468,8470,8471,8473,8474,630],{},"Le cours d'introduction a posé le ",[604,8465,8466],{},"format CSV"," comme support universel et\nle module ",[829,8469,1149],{}," (",[829,8472,1158],{},") comme moyen de lecture standard. Vous avez vu\nque toutes les valeurs lues sont des chaînes et qu'il faut convertir\nexplicitement les colonnes numériques. La liste de dictionnaires offre\nensuite un accès expressif et stable à chaque cellule via\n",[829,8475,6991],{},[600,8477,8478,8479,8481,8482,8525,8526,8528,8529,8532,8533,840,8535,2879,8537,8539,8540,3360],{},"Le cours sur la ",[604,8480,1763],{}," a formalisé la sélection des lignes vérifiant\nun critère : parcours linéaire en ",[905,8483,8485,8504],{"className":8484},[1805],[905,8486,8488],{"className":8487},[1809],[1811,8489,8490],{"xmlns":1813},[1815,8491,8492,8502],{},[1818,8493,8494,8496,8498,8500],{},[1821,8495,1824],{"mathvariant":1823},[1826,8497,1193],{"stretchy":1828},[1821,8499,1831],{},[1826,8501,1834],{"stretchy":1828},[1836,8503,1839],{"encoding":1838},[905,8505,8507],{"className":8506,"ariaHidden":1844},[1843],[905,8508,8510,8513,8516,8519,8522],{"className":8509},[1848],[905,8511],{"className":8512,"style":1853},[1852],[905,8514,1824],{"className":8515,"style":1859},[1857,1858],[905,8517,1193],{"className":8518},[1863],[905,8520,1831],{"className":8521},[1857,1867],[905,8523,1834],{"className":8524},[1871]," avec un ",[829,8527,1592],{},", ou\ncompréhension de liste plus concise. Les critères composés s'expriment en\n",[604,8530,8531],{},"logique propositionnelle"," avec ",[829,8534,2873],{},[829,8536,2878],{},[829,8538,2884],{},". Vous avez aussi vu\ncomment détecter des doublons, ce qui est un cas typique de ",[604,8541,8542],{},"test de\ncohérence",[600,8544,8545,8546,8549,8550,8552,8553,8555,8556,8558],{},"Le cours sur le ",[604,8547,8548],{},"tri"," a introduit ",[829,8551,3601],{}," et son paramètre ",[829,8554,3749],{},", avec\nla notion essentielle de ",[604,8557,4397],{}," — les égalités préservent l'ordre\nd'entrée, ce qui permet le tri multi-critères. Vous savez maintenant trier\nascendant, descendant, par plusieurs colonnes (via un tuple ou par tris\nsuccessifs).",[600,8560,8561,8562,8564,8565,8567,8568,8571,8572,8575,8576,8641,8642,8707],{},"Le cours final a réuni les deux opérations les plus puissantes : la\n",[604,8563,4899],{}," de deux tables par une clé commune, et l'",[604,8566,3489],{}," d'une\ntable en dictionnaire ",[829,8569,8570],{},"{clé: ligne}",". La leçon clé est que ",[604,8573,8574],{},"l'indexation\naccélère la fusion"," : passer d'une double boucle ",[905,8577,8579,8602],{"className":8578},[1805],[905,8580,8582],{"className":8581},[1809],[1811,8583,8584],{"xmlns":1813},[1815,8585,8586,8600],{},[1818,8587,8588,8590,8592,8594,8596,8598],{},[1821,8589,1824],{"mathvariant":1823},[1826,8591,1193],{"stretchy":1828},[1821,8593,1831],{},[1826,8595,5984],{},[1821,8597,5987],{},[1826,8599,1834],{"stretchy":1828},[1836,8601,5992],{"encoding":1838},[905,8603,8605,8629],{"className":8604,"ariaHidden":1844},[1843],[905,8606,8608,8611,8614,8617,8620,8623,8626],{"className":8607},[1848],[905,8609],{"className":8610,"style":1853},[1852],[905,8612,1824],{"className":8613,"style":1859},[1857,1858],[905,8615,1193],{"className":8616},[1863],[905,8618,1831],{"className":8619},[1857,1867],[905,8621],{"className":8622,"style":6014},[2210],[905,8624,5984],{"className":8625},[6018],[905,8627],{"className":8628,"style":6014},[2210],[905,8630,8632,8635,8638],{"className":8631},[1848],[905,8633],{"className":8634,"style":1853},[1852],[905,8636,5987],{"className":8637},[1857,1867],[905,8639,1834],{"className":8640},[1871],"\nà un parcours ",[905,8643,8645,8668],{"className":8644},[1805],[905,8646,8648],{"className":8647},[1809],[1811,8649,8650],{"xmlns":1813},[1815,8651,8652,8666],{},[1818,8653,8654,8656,8658,8660,8662,8664],{},[1821,8655,1824],{"mathvariant":1823},[1826,8657,1193],{"stretchy":1828},[1821,8659,1831],{},[1826,8661,6066],{},[1821,8663,5987],{},[1826,8665,1834],{"stretchy":1828},[1836,8667,6073],{"encoding":1838},[905,8669,8671,8695],{"className":8670,"ariaHidden":1844},[1843],[905,8672,8674,8677,8680,8683,8686,8689,8692],{"className":8673},[1848],[905,8675],{"className":8676,"style":1853},[1852],[905,8678,1824],{"className":8679,"style":1859},[1857,1858],[905,8681,1193],{"className":8682},[1863],[905,8684,1831],{"className":8685},[1857,1867],[905,8687],{"className":8688,"style":6014},[2210],[905,8690,6066],{"className":8691},[6018],[905,8693],{"className":8694,"style":6014},[2210],[905,8696,8698,8701,8704],{"className":8697},[1848],[905,8699],{"className":8700,"style":1853},[1852],[905,8702,5987],{"className":8703},[1857,1867],[905,8705,1834],{"className":8706},[1871]," change d'échelle.",[600,8709,8710,8711,8714],{},"Ces opérations préfigurent les ",[604,8712,8713],{},"bases de données relationnelles"," que vous\naborderez en Terminale (modèle relationnel, jointure SQL). Pour l'instant,\nvous disposez d'une boîte à outils complète pour manipuler n'importe quel\nfichier CSV en Python pur.",[595,8716,8718],{"id":8717},"carte-des-notions","Carte des notions",[639,8720,8721,8734],{},[642,8722,8723],{},[645,8724,8725,8728,8731],{},[648,8726,8727],{},"Cours",[648,8729,8730],{},"Notions clés",[648,8732,8733],{},"Items BO",[655,8735,8736,8753,8765,8781],{},[645,8737,8738,8741,8747],{},[660,8739,8740],{},"1 — Tables et CSV",[660,8742,8743,8744,8746],{},"Forme tabulaire, descripteur, ",[829,8745,1272],{},", liste de dictionnaires",[660,8748,8749,3692,8751],{},[852,8750],{"code":589},[852,8752],{"code":590},[645,8754,8755,8758,8761],{},[660,8756,8757],{},"2 — Recherche et filtrage",[660,8759,8760],{},"Parcours linéaire, compréhension de liste, logique propositionnelle",[660,8762,8763],{},[852,8764],{"code":590},[645,8766,8767,8770,8777],{},[660,8768,8769],{},"3 — Trier une table",[660,8771,8772,840,8774,8776],{},[829,8773,3601],{},[829,8775,3749],{},", tri stable, tri multi-critères",[660,8778,8779],{},[852,8780],{"code":3571},[645,8782,8783,8786,8791],{},[660,8784,8785],{},"4 — Fusion et indexation",[660,8787,5537,8788,8790],{},[829,8789,5540],{},", jointure par clé commune, jointure interne\u002Fexterne",[660,8792,8793,3692,8795],{},[852,8794],{"code":4877},[852,8796],{"code":589},[600,8798,8799,819],{},[604,8800,8801],{},"Articulations",[874,8803,8804,8811,8906,8914],{},[877,8805,8806,8807,8810],{},"La ",[604,8808,8809],{},"lecture CSV"," (cours 1) est le préalable de tout le reste.",[877,8812,8806,8813,8815,8816,8818,8819,5093,8862,8905],{},[604,8814,1763],{}," (cours 2) est généralisée par l'",[604,8817,3489],{}," (cours 4) :\npasser de ",[905,8820,8822,8841],{"className":8821},[1805],[905,8823,8825],{"className":8824},[1809],[1811,8826,8827],{"xmlns":1813},[1815,8828,8829,8839],{},[1818,8830,8831,8833,8835,8837],{},[1821,8832,1824],{"mathvariant":1823},[1826,8834,1193],{"stretchy":1828},[1821,8836,1831],{},[1826,8838,1834],{"stretchy":1828},[1836,8840,1839],{"encoding":1838},[905,8842,8844],{"className":8843,"ariaHidden":1844},[1843],[905,8845,8847,8850,8853,8856,8859],{"className":8846},[1848],[905,8848],{"className":8849,"style":1853},[1852],[905,8851,1824],{"className":8852,"style":1859},[1857,1858],[905,8854,1193],{"className":8855},[1863],[905,8857,1831],{"className":8858},[1857,1867],[905,8860,1834],{"className":8861},[1871],[905,8863,8865,8884],{"className":8864},[1805],[905,8866,8868],{"className":8867},[1809],[1811,8869,8870],{"xmlns":1813},[1815,8871,8872,8882],{},[1818,8873,8874,8876,8878,8880],{},[1821,8875,1824],{"mathvariant":1823},[1826,8877,1193],{"stretchy":1828},[2025,8879,862],{},[1826,8881,1834],{"stretchy":1828},[1836,8883,3513],{"encoding":1838},[905,8885,8887],{"className":8886,"ariaHidden":1844},[1843],[905,8888,8890,8893,8896,8899,8902],{"className":8889},[1848],[905,8891],{"className":8892,"style":1853},[1852],[905,8894,1824],{"className":8895,"style":1859},[1857,1858],[905,8897,1193],{"className":8898},[1863],[905,8900,862],{"className":8901},[1857],[905,8903,1834],{"className":8904},[1871]," pour des recherches répétées.",[877,8907,2471,8908,8910,8911,8913],{},[604,8909,8548],{}," (cours 3) prépare la recherche dichotomique\n(",[852,8912],{"code":3425},", chapitre algorithmique).",[877,8915,8806,8916,8918,8919,8921,8922,8924],{},[604,8917,4899],{}," (cours 4) annonce la ",[604,8920,4903],{}," du modèle relationnel\n(",[852,8923],{"code":5374},", Terminale).",[595,8926,8928],{"id":8927},"auto-évaluation","Auto-évaluation",[860,8930,8932,8937],{"correct":862,"slug":8931},"pd-tables-donnees-1-q1",[866,8933,8934],{"v-slot:question":827},[600,8935,8936],{},"Quel modèle de données utilisons-nous pour représenter une table en Python dans ce chapitre ?",[866,8938,8939],{"v-slot:choices":827},[874,8940,8941,8944,8947,8950],{},[877,8942,8943],{},"Une liste de listes",[877,8945,8946],{},"Une liste de dictionnaires",[877,8948,8949],{},"Un dictionnaire de listes",[877,8951,8952],{},"Une matrice NumPy",[860,8954,8956,8970],{"correct":862,"slug":8955},"pd-tables-donnees-1-q2",[866,8957,8958],{"v-slot:question":827},[600,8959,8960,8961,8963,8964,8966,8967,8969],{},"Que retourne ",[829,8962,1272],{}," pour la valeur ",[829,8965,1280],{}," lue dans une colonne ",[829,8968,739],{}," ?",[866,8971,8972],{"v-slot:choices":827},[874,8973,8974,8979,8984,8990],{},[877,8975,8976,8977],{},"L'entier ",[829,8978,752],{},[877,8980,8981,8982],{},"La chaîne ",[829,8983,1280],{},[877,8985,8986,8987],{},"Le flottant ",[829,8988,8989],{},"16.0",[877,8991,8992],{},[829,8993,1690],{},[860,8995,8997,9006],{"correct":2027,"slug":8996},"pd-tables-donnees-1-q3",[866,8998,8999],{"v-slot:question":827},[600,9000,9001,9002,9005],{},"Pour trier une liste de dictionnaires ",[829,9003,9004],{},"eleves"," par âge décroissant, on écrit :",[866,9007,9008],{"v-slot:choices":827},[874,9009,9010,9015,9020,9025],{},[877,9011,9012],{},[829,9013,9014],{},"sorted(eleves, key=\"age\")",[877,9016,9017],{},[829,9018,9019],{},"sorted(eleves, key=lambda e: e[\"age\"])",[877,9021,9022],{},[829,9023,9024],{},"sorted(eleves, key=lambda e: e[\"age\"], reverse=True)",[877,9026,9027],{},[829,9028,9029],{},"eleves.sort(\"age\", desc=True)",[860,9031,9034,9039],{"correct":9032,"slug":9033},"0,2","pd-tables-donnees-1-q4",[866,9035,9036],{"v-slot:question":827},[600,9037,9038],{},"Quels avantages apporte l'indexation d'une table par une clé unique ? (plusieurs réponses)",[866,9040,9041],{"v-slot:choices":827},[874,9042,9043,9046,9049,9052],{},[877,9044,9045],{},"Accès en temps constant à une ligne par sa clé",[877,9047,9048],{},"Tri automatique de la table",[877,9050,9051],{},"Préparation efficace à une fusion par clé commune",[877,9053,9054],{},"Réduction de la taille mémoire",[9056,9057,9059],"self-eval-free-text",{"answer":1158,"case-sensitive":1828,"slug":9058},"pd-tables-donnees-1-q5",[866,9060,9061],{"v-slot:question":827},[600,9062,9063,9064,9066],{},"Quel nom de classe du module ",[829,9065,1149],{}," permet de lire chaque ligne d'un CSV comme un dictionnaire ?",[9056,9068,9070],{"answer":1120,"case-sensitive":1828,"slug":9069},"pd-tables-donnees-1-q6",[866,9071,9072],{"v-slot:question":827},[600,9073,9074],{},"Comment qualifie-t-on un tri qui préserve l'ordre relatif des éléments égaux ?",[860,9076,9078,9088],{"correct":2027,"slug":9077},"pd-tables-donnees-1-q7",[866,9079,9080],{"v-slot:question":827},[600,9081,9082,9083,2879,9085,9087],{},"Quelle est la complexité asymptotique d'une fusion de deux tables ",[829,9084,1831],{},[829,9086,5987],{}," lignes après indexation de la seconde ?",[866,9089,9090],{"v-slot:choices":827},[874,9091,9092,9159,9226,9311],{},[877,9093,9094],{},[905,9095,9097,9120],{"className":9096},[1805],[905,9098,9100],{"className":9099},[1809],[1811,9101,9102],{"xmlns":1813},[1815,9103,9104,9118],{},[1818,9105,9106,9108,9110,9112,9114,9116],{},[1821,9107,1824],{"mathvariant":1823},[1826,9109,1193],{"stretchy":1828},[1821,9111,1831],{},[1826,9113,5984],{},[1821,9115,5987],{},[1826,9117,1834],{"stretchy":1828},[1836,9119,5992],{"encoding":1838},[905,9121,9123,9147],{"className":9122,"ariaHidden":1844},[1843],[905,9124,9126,9129,9132,9135,9138,9141,9144],{"className":9125},[1848],[905,9127],{"className":9128,"style":1853},[1852],[905,9130,1824],{"className":9131,"style":1859},[1857,1858],[905,9133,1193],{"className":9134},[1863],[905,9136,1831],{"className":9137},[1857,1867],[905,9139],{"className":9140,"style":6014},[2210],[905,9142,5984],{"className":9143},[6018],[905,9145],{"className":9146,"style":6014},[2210],[905,9148,9150,9153,9156],{"className":9149},[1848],[905,9151],{"className":9152,"style":1853},[1852],[905,9154,5987],{"className":9155},[1857,1867],[905,9157,1834],{"className":9158},[1871],[877,9160,9161],{},[905,9162,9164,9187],{"className":9163},[1805],[905,9165,9167],{"className":9166},[1809],[1811,9168,9169],{"xmlns":1813},[1815,9170,9171,9185],{},[1818,9172,9173,9175,9177,9179,9181,9183],{},[1821,9174,1824],{"mathvariant":1823},[1826,9176,1193],{"stretchy":1828},[1821,9178,1831],{},[1826,9180,6066],{},[1821,9182,5987],{},[1826,9184,1834],{"stretchy":1828},[1836,9186,6073],{"encoding":1838},[905,9188,9190,9214],{"className":9189,"ariaHidden":1844},[1843],[905,9191,9193,9196,9199,9202,9205,9208,9211],{"className":9192},[1848],[905,9194],{"className":9195,"style":1853},[1852],[905,9197,1824],{"className":9198,"style":1859},[1857,1858],[905,9200,1193],{"className":9201},[1863],[905,9203,1831],{"className":9204},[1857,1867],[905,9206],{"className":9207,"style":6014},[2210],[905,9209,6066],{"className":9210},[6018],[905,9212],{"className":9213,"style":6014},[2210],[905,9215,9217,9220,9223],{"className":9216},[1848],[905,9218],{"className":9219,"style":1853},[1852],[905,9221,5987],{"className":9222},[1857,1867],[905,9224,1834],{"className":9225},[1871],[877,9227,9228],{},[905,9229,9231,9263],{"className":9230},[1805],[905,9232,9234],{"className":9233},[1809],[1811,9235,9236],{"xmlns":1813},[1815,9237,9238,9260],{},[1818,9239,9240,9242,9244,9246,9248,9250,9252,9254,9256,9258],{},[1821,9241,1824],{"mathvariant":1823},[1826,9243,1193],{"stretchy":1828},[1821,9245,2172],{},[1826,9247,2175],{},[1826,9249,1193],{"stretchy":1828},[1821,9251,1831],{},[1826,9253,6066],{},[1821,9255,5987],{},[1826,9257,1834],{"stretchy":1828},[1826,9259,1834],{"stretchy":1828},[1836,9261,9262],{"encoding":1838},"\\mathcal{O}(\\log(n + m))",[905,9264,9266,9298],{"className":9265,"ariaHidden":1844},[1843],[905,9267,9269,9272,9275,9278,9283,9286,9289,9292,9295],{"className":9268},[1848],[905,9270],{"className":9271,"style":1853},[1852],[905,9273,1824],{"className":9274,"style":1859},[1857,1858],[905,9276,1193],{"className":9277},[1863],[905,9279,2202,9281],{"className":9280},[2201],[905,9282,2206],{"style":2205},[905,9284,1193],{"className":9285},[1863],[905,9287,1831],{"className":9288},[1857,1867],[905,9290],{"className":9291,"style":6014},[2210],[905,9293,6066],{"className":9294},[6018],[905,9296],{"className":9297,"style":6014},[2210],[905,9299,9301,9304,9307],{"className":9300},[1848],[905,9302],{"className":9303,"style":1853},[1852],[905,9305,5987],{"className":9306},[1857,1867],[905,9308,9310],{"className":9309},[1871],"))",[877,9312,9313],{},[905,9314,9316,9339],{"className":9315},[1805],[905,9317,9319],{"className":9318},[1809],[1811,9320,9321],{"xmlns":1813},[1815,9322,9323,9337],{},[1818,9324,9325,9327,9329,9335],{},[1821,9326,1824],{"mathvariant":1823},[1826,9328,1193],{"stretchy":1828},[2020,9330,9331,9333],{},[1821,9332,1831],{},[2025,9334,2027],{},[1826,9336,1834],{"stretchy":1828},[1836,9338,2032],{"encoding":1838},[905,9340,9342],{"className":9341,"ariaHidden":1844},[1843],[905,9343,9345,9348,9351,9354,9383],{"className":9344},[1848],[905,9346],{"className":9347,"style":2042},[1852],[905,9349,1824],{"className":9350,"style":1859},[1857,1858],[905,9352,1193],{"className":9353},[1863],[905,9355,9357,9360],{"className":9356},[1857],[905,9358,1831],{"className":9359},[1857,1867],[905,9361,9363],{"className":9362},[2058],[905,9364,9366],{"className":9365},[2062],[905,9367,9369],{"className":9368},[2066],[905,9370,9372],{"className":9371,"style":2071},[2070],[905,9373,9374,9377],{"style":2074},[905,9375],{"className":9376,"style":2079},[2078],[905,9378,9380],{"className":9379},[2083,2084,2085,2086],[905,9381,2027],{"className":9382},[1857,2086],[905,9384,1834],{"className":9385},[1871],[9387,9388,9390,9395],"self-eval-ordering",{"slug":9389},"pd-tables-donnees-1-q8",[866,9391,9392],{"v-slot:question":827},[600,9393,9394],{},"Ordonnez les étapes d'une fusion efficace de deux tables par clé commune :",[866,9396,9397],{"v-slot:items":827},[874,9398,9399,9402,9405,9408,9411],{},[877,9400,9401],{},"Choisir la colonne qui servira de clé commune",[877,9403,9404],{},"Construire un dictionnaire {clé: ligne} sur la seconde table",[877,9406,9407],{},"Parcourir la première table",[877,9409,9410],{},"Pour chaque ligne, chercher la ligne correspondante dans l'index",[877,9412,9413],{},"Combiner les deux lignes dans un nouveau dictionnaire et l'ajouter au résultat",{"title":827,"searchDepth":922,"depth":922,"links":9415},[9416,9417,9418],{"id":8449,"depth":922,"text":8450},{"id":8717,"depth":922,"text":8718},{"id":8927,"depth":922,"text":8928},"Vue d'ensemble du chapitre, carte des notions, auto-évaluation finale.",{"self_eval_slug":9421},"nsi-1ere-pd-tables-donnees","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Fchapitre.memo",[9424,9426,9432,9435,9437,9442,9443,9450],{"slug":8931,"kind":1740,"question":8936,"choices":9425,"correct":862,"multi":1742,"explanation":827},[8943,8946,8949,8952],{"slug":8955,"kind":1740,"question":9427,"choices":9428,"correct":862,"multi":1742,"explanation":827},"Que retourne csv.DictReader pour la valeur \"16\" lue dans une colonne age ?",[9429,9430,9431,1690],"L'entier 16","La chaîne \"16\"","Le flottant 16.0",{"slug":8996,"kind":1740,"question":9433,"choices":9434,"correct":2027,"multi":1742,"explanation":827},"Pour trier une liste de dictionnaires eleves par âge décroissant, on écrit :",[9014,9019,9024,9029],{"slug":9033,"kind":1740,"question":9038,"choices":9436,"correct":9032,"multi":1181,"explanation":827},[9045,9048,9051,9054],{"slug":9058,"kind":9438,"question":9439,"answer":1158,"caseSensitive":1742,"tolerance":9440,"inputType":9441,"explanation":827},"free_text","Quel nom de classe du module csv permet de lire chaque ligne d'un CSV comme un dictionnaire ?",0,"string",{"slug":9069,"kind":9438,"question":9074,"answer":1120,"caseSensitive":1742,"tolerance":9440,"inputType":9441,"explanation":827},{"slug":9077,"kind":1740,"question":9444,"choices":9445,"correct":2027,"multi":1742,"explanation":827},"Quelle est la complexité asymptotique d'une fusion de deux tables n et m lignes après indexation de la seconde ?",[9446,9447,9448,9449],"O(n×m)\\mathcal{O}(n \\times m)O(n×m)","O(n+m)\\mathcal{O}(n + m)O(n+m)","O(log⁡(n+m))\\mathcal{O}(\\log(n + m))O(log(n+m))","O(n2)\\mathcal{O}(n^2)O(n2)",{"slug":9389,"kind":9451,"question":9394,"items":9452,"explanation":827},"ordering",[9401,9404,9407,9410,9413],{"title":8443,"description":9419},"1.nsi-1ere\u002Fpd-tables-donnees\u002Fchapitre.memo","8O2jHBMCXVfYTBBK_RmKdbrxGyvmmBvZs8dNleGj-5c",1788035580297]