Aller au contenu

Affectations et listes

Un professeur veut relever ses notes⚓︎

Un professeur a relevé la liste des notes obtenues dans un groupe à une évaluation. (liste_1).

Il désire relever toutes les notes d’1 point, mais il veut garder pour lui la liste originale.

Voici son script et le résultat obtenu à l’exécution :

Testez

liste_2 = liste_1

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

🌵 On observe que le professeur a « perdu » la liste originale liste_1, qui est devenu identique à la liste_2.

👉 En effet, tout se passe comme si l’instruction liste_2 = liste_1 donnait deux noms différents au même objet.

liste_2 n’est pas une nouvelle liste.

Il y a plusieurs syntaxes possibles pour remédier à ce problème : en voici quelques unes.

Testez

liste_2 = list(liste_1)

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Testez

liste_2 = liste_1[:]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Testez

liste_2 = liste_1.copy()

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Testez

liste_2 = [note for note in liste_1] avec une liste en compréhension

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier

Un autre exemple avec des fruits :⚓︎

🌵 Comme on peut le voir, lors de sa création, fruits_2 pointe vers le même objet de type list : fruits_1.

😏 Le fait de modifier fruits_2, modifie donc forcément fruits_1.

👉 Ce mécanisme est très important et il faudra le garder à l'esprit.

Exercice : Modification d'un tableau⚓︎

On se donne un tableau, une valeur cible et une valeur de remplacement et il faut parcourir le tableau et remplacer la cible par la nouvelle valeur.

Écrire la fonction remplacer prenant en argument :

  • une liste d'entiers valeurs
  • un entier valeur_cible
  • un entier nouvelle_valeur

Cette fonction doit renvoyer une nouvelle liste contenant les mêmes valeurs que valeurs, dans le même ordre, sauf valeur_cible qui a été remplacée par nouvelle_valeur.

⚠️ La liste passée en paramètre ne doit pas être modifiée.

Exemples
>>> valeurs = [3, 8, 7]
>>> remplacer(valeurs, 3, 0)
[0, 8, 7]
>>> valeurs
[3, 8, 7]
>>> valeurs = [3, 8, 3, 5]
>>> remplacer(valeurs, 3, 0)
[0, 8, 0, 5]
>>> valeurs
[3, 8, 3, 5]
Compléter

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128073.128013.8217.127797à8qhi/Tn:vPes5!0k39jxbgr;._4cdfo)aSyt,é]R(U7w6 m-1CL2=[èpêAzl*Ou050H0p0O0L0i0:0q0Y0G0:0L0q0q0)010O0i0,010406050q0?0Z0Z0L0B0N040M0J0:0?170J0l0Y020L0Z0,0C0Y0S0p1h0B0g0?0p0q050j1e1g1i1k1c0,04051P1I1S0j1P1c0H0i0n0 111315110l0A0?0L0A0p0!0,0N0O0h1r0Y0h0i0A0h0:1{0h0O1a050`0z0:0p1#1214011`1|1~1|0O2426220O0B1Q1?0 1n0q0,0L0l150(01281%010I0|0p0l1v0p222q2s2x2a2A262D0Z2F040b0Y0o0B0J0,0J0q0i1q1s0^2o0B0B0p0G2!1I2H0l1Q0j1?2:2k2m2l230H2J1(0i0l2C2X221Y1!10292}2 0l0J33220,2)1Q2.2:3g1d2r1s352y390B1h0:220L1_2)0I15030E0E0G3a0p1~380J0!0(0!0#1a0#1I0L3h3k1b3j2I3m2a3o3q3s3u0p3w013y3A3C3E303H3H1a0(3N3P2s3R2.2|013W0L3r1Q3t0h3v3x3z3B0^3*393,0v1a0v3:2-3Q1c3@3U153`3|053~403$423)2~3+3I0F1a0F4b1J4d3S3l1$3V0J3p3{3Y3 3!413(444q463I0r1a0r4w3g4e3k3^4i4G4m3%433D4M3G3I0X1a0X4S4y4f4B4h4D3X3}3Z3#4!4p3F3,0V1a0V4-3=4U3T4:3_4=4F4@4H4_4o4L4|3I0f1a0f512/1T3e1I332?0H2m2{4g014#321Z1Q3d0p3f3Q4c3=054#5B2I0i0H153z2.3,3K4@5J5L4K4$5e3J2w2N0p5S4#454(5W2:3O4z3^0u1a0^0I5D5k4/36010W1a0Y5;5H4A5@0l0I1a2)1w110G0p0B5|5+5t19040T695?3n1a0n3{0p0?0B1H4x5E6g2a6c0P5|5{6r4h6i6k6m3A0i250p6f4V6b1a6u6p2/6w6H550l1a390?0n3D260E6j266m6G545@6c0K0m5|1c6L5}0Y5R015M3k3,2v5Q5K6;5T5$6@5X2E5!4{4r3-5)040Y776N6$6h042)1e0:0`0O6v6a550J1a0)7i6x016c0*0R6+6#1s6:6=2s473Y7x6|4%7A0Y5Y715d73487578795~2y5-040I4D7o6O5 1a3D1B2C7h6-7O3^0J5_042~7V7a3V6z6Z6n7v3^6c6*6-6,3i3@7C5N4s7B6`5c5U734t7G706{5#7E817M7N787j5@7R0i5:7%8h7b7Z2O0l7$3g7(5t7l040)7n8m7p6Q046Y6l0B6C6E7@6I047`4T7@7 6?4O827I854N0!4P882O8T6}8R8e8f8f8n7:7c1G0?7f0L8s5C7p8w0D8J6P1a0L0,0,2C0H8_6%1a6e6-8*6y046S6U0:6W8E6!957p6(7u9f4V8P7z4)8S8a728V4*8Y5Z9p7J9r220j3O8(7796017R3D0q6F9j7/157_9i7}9k830E800!4~6_8!8c9T6 8Z9v8U5%9U3:9B8)8B628-8/8;6q7W2y8@917b8|8~0l909J7P6s939^8+8p7#a29L1a0K9N8=9P5S9S5g9V9#8#0!5g9t9W5Vaf9)8g7p7R2)0O6m0l7.9 977d8.7gaa5E0j5G5l5A5n5x1I0O5qaL2_2;0L6E2:5o1O6.5t630E0I0L0u0p0E0h7L1A1C1E1G0Y8M5C1V3R333^0L0H0Z1r2Z0i1^0H2s1.0B1a1Oa^a`a|2!0!170O2i040.2g7#a~awa=aV0%3t1Y0I2A0GaB0Q0Y2$660O0Y0p0y670G0i66by0qbx1E000|0Ya!1p0Y5z9|2)0Y0q0J2~bu272 bO120Ya{bo0i670Y11b*0ibG272~a}6k0D9CbkaJ0na?0_0{0}3^0O1Gc00/2w2V2C15c58C4e1f1C1k0kc10p0/2-cb1M3R1P0UbY5J0Q271E0i0Y0nb(8r0Y0eb*001G3d2ZbFbxb+1e1Z2sc0a/1Ta?1Z3^1)1+1-1/1;1?1^2c1}1 21aW552L2C2E1a2R0M0G0B18bx0o1=1@bj3i5z5}3;5kaG7~9Q5N0v5(4k6/9Q8b4|d23Kalah7Ed92w5a4Jd73+de759D7R5/a65^5`dp609-640L668G2D8kdp6c949O9K3_7;8F6odEay7q6Jax4WdH6BbC8I9~7^dN8A9=8+996Va%9d68dU8K6)aD5=ac6{d174d47Cdi46d22vdb846}d_df4Zd|ddd;9z76aqdY97d%0q0E3/dXdF8w8z8t9D8Ce9d,6.9l0l0!d27Ld=d69q3Geq9Z9ue1d8epd 4I4n7DeAere47Ndm1a7Td(eh9,7,dO8v7+7-eddL0l0z62b19IdKdV6ddseY042MdBa1d)8`8D6A6nebe-040Kd+7{8Od06?d24tagezdj0!877HdceA87dgeEd@evf59y9A9BeK7,8leOe7dGe;7=eaece$8K0*ds1a0ie^7teV7)7meg3Q8ue:d%8H26e^a:52e}ade 8W9of3d^fRd{eFf48Xfb4`9wfe4P8%9*fG7XfpdIe@e/9204fvf:7bfyf@a004fAfmee7meRe:d!9bd$e=el5+enep0!4*f2fXfU9sf7fTfe9sf!gigagcap9Car9-au0Bc^fFeidQe?fs4ydUg9d29(3td?euga4~fWfdgJeC5bgefe9(e47|ab5Ie~7zd2aogGetf$gaakghgQg(gOdhgIgZfgc$f,ekfB8vg0g^557rdp0Z0i49e^6Kf~dLg 5hh2g15@h60450f`a7f|g7c fPgY0!0wfSg+d2hmgLg/hlg-fchshmdlgr0429679:6Mgx8,dvdx0EdzflgVdLdCfwf-6mdJhMe%h3gw7phb4ahedM04hV3=f+2yhb0te^a9g{5@effEh(9Dg}h!h+h8h/h*h0045ih!6th9h}4 fzhhd.7yeod90thngMibexamf40#ic4^g.g%ifhyfn7RhB0BhD76hFg@h4fC8xh=hE9g1af?ft55hYh{iy5thbi0iGf;h%iCfnhbhdiO2y6cf}fFgUaEaG1V5m0jaU1R041A3B0,b(0/0 270qc.c:0 0i0!0^130?0~0,0?b-0Yc0b.0/0!268^b^i)b|0|0qcO3455a_a{0la}1^2~7Tb41Rb6jkjmeobbbd0d0Yjy0dcNaV0a0Y0$3D3tbY0B0Q2W9|bZ0~0L0?bO2U250+2O0Pby1s3!0I0_j40JbN9HjOj*3B1gi?ct0:0c2~bG0B0?2+bi5{5Ge9eb0Y0)cue=6o5Gbu1rdzbx0^0?0y7G0J0Z0~bo0I0Q2)8rjPjR060Z0-2O0Y0J0z0x0_b?5F3ChQgz1Ik50l0cc1jO0Y0?bYg326b,b.ja1Wb_jgjsb8j{jo8wb55tjjkU1rba2ZbdbmbS1n1pj{3d2V2XcqjY2%2)j`1rjCi+0=3ljK270H1r0GkIbYjQ2k271~b.0Ycsk6cE0-l7l40Yl6bRktkv0OjXlc9H0B3t66g40Ykk0n0J0Nk=2r0Bb*3t7T0lk_0lkPcl04k*bT1o2!jSk:0qk=c.k=kJl8b-cLcv2$a-cA1^j-0,0:0+cLjQbL6mbybxcz2O1ebR2CbZ0B3B6mcKb*a.e9bWj|kzg@5GlJ6,i*a@kZb7jllPkWjq0,kTmebik%bc2P0.1pbRlNk-1^2W136DfKb^mb55cR1,1.1:c?cX1 2e202Gfnc(5Yc+0Yc-c/0,c;mGgv5Ec`4zc|1Qc~i89R6?0Fd3g#ih46m*dag*gMm/huf#9$f5d3e4fjdoh!7+5{h!dthGl*dw67e^dDhT5tejk3iJhWfnnc7=fJe#nag|dWiKg2j(9a9cg6i1a8fM2/i!d-gWhjeom*6^esm-3GnDigf83+nIilhvg%nIf)hFmWiRf 8xi33Ve*e,nue(n2gyhS9;dF9he|gCgXnCeBgdm=eBhrnPn@glg+m*eHfhgqngn(f/noh:g`o4iWiEg~h~h,n#iYh?8?1a0;nX97nT3Rn.nBm`f1nFnKm.ffn^m_m*fae0n|ffnRhzeMojfof_o72a7*fxolh)nYeZ1*nkn*hNe.iVdZh-nwome$g9m*f(orgmo$nJo)fVn{n?o%eIfihzdAh|8+ixnlf;iFo{f^i6o^c7fDoFnh8FnjfLi7nAd/m)gbidgIm*gg89o,gkozn?goo;f*oNe8k3o3o~f{o}oSdPeQodoFefp46Rnqd#6Xnt8Nonpb7zm*gFd5nGm`gKm;pf9YnNm^6}pNg;9*fj9GoRnzoT8Lp97wn/m`g!pPosnHajo+oAako.pUaopof*iwpsgApxfuhPoHpuhfoenUdLpCp1foo`q3nmf=q5p0pJo!p.m*hxo(oAhqpTn_hqp{qup!e6dFas0_avpDkAfrg7aFkzaHaT5xm9qM0@cPmcjtmf60kXjrqRk#jvk(2PlWk+lOj{0L6Ul3l9cLl`l)jK0h2C2Yk`b^1Pk}lil~cEjQmwbOjRk-l9b)q$q-27lB2o1wq;q?j{j$kJ5{1B042Vkj8:8Fj467dz2)1IricMmzqQmBb1mDcUmV1_mIc!mLdFmNc*2QmQi^mT2SmV69mY3i95m$pai98Wm+p;gm0r5Wov6}r!daqwm_r(g;m}3!dpn0ds61n465n7n#n9qgg?ndn#iQivePfIdSmyoVhfs0pqfokLg57=oXp,rYm(7zr!nEm,p=rWd`qtr+3-pWrZe3n s9qBgtoMh@o9n%kAoF8jhLofo1sDqd8w0siBs1sIs3mxp(sOqA7Y0}sSs98CsbpHsdqd7RoEqdp59eoIc7eTszs2r~s6h#q9oZa;i$mYi)qOs}b`m9jd0}04.