Aller au contenu

Les listes de listes

Nous avons vu une utilisation des listes de listes dans la vidéo réalisée par Charles Poulmaire : Vidéo sur les listes

I. Présentation des matrices⚓︎

Une remarque pour commencer

Exécuter ci-dessous

###(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

Accéder aux valeurs d'un tableau

🤔 Et oui... puisque a référence [1, 2, 3], cela implique qu'il revient au même d'écrire a ou [1, 2, 3] !

Donc a[0] est la même chose que [1, 2, 3][0]

😂 Quel intérêt ? Personne n'écrit les choses ainsi ?

😊 Certes, mais cela pourrait vous aider à y voir clair dans ce qui suit...

Exemple de matrice

Voici un exemple de matrice (dans le langage courant on parle aussi de tableau au sens du tableur mais la confusion possible avec les tableaux informatiques que nous connaissons est trop risquée, nous parlerons donc de matrices) :

\[ \begin{bmatrix} 1 & 3 & 4 \\ 5 & 6 & 8 \\ 2 & 1 & 3 \\ \end{bmatrix} \]

Nous pouvons représenter cette matrice en Python à l'aide d'une liste... de listes (le nom de la variable m évoque le 'm' de matrice bien sûr) :

m = [[1, 3, 4], [5, 6, 8], [2, 1, 3]]
À vous de jouer

Compléter ci-dessous : à l'aide d'une boucle for parcourir la liste m et afficher tous les éléments.

###(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

Solution
for element in m :
    print(element)

II. Accéder à une valeur⚓︎

Accéder à une valeur

Comment accéder à la valeur 6 de la matrice m ?
6 est la valeur se trouvant à la 2ème ligne 2ème colonne.

Mais regardons comment est écrite la matrice :

m = [[1, 3, 4], [5, 6, 8], [2, 1, 3], [7, 8, 15]]

La deuxième ligne est clairement : m[1], vous êtes d'accord ? Et du coup, 6 est la 2ème valeur de deuxieme_ligne, on est toujours d'accord ?

Tester ci-dessous :

###(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

À vous de jouer 3

Compléter ci-dessous pour faire afficher la valeur 7.
Vous utiliserez la deuxième méthode de l'exemple précédent

###(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

Solution
print(m[3][0])

Accéder à un élément

🌵 Attention : la première ligne correspond à i = 0, et la première colonne à j = 0

👉 Pour accéder à la ligne i, colonne j, on ecrira donc m[i][j]

😊 Il suffit de le savoir, alors maintenant... vous savez !

Présentation

Il est souvent plus pratique de présenter ces "tableaux de tableaux" comme suit :

m = [[1, 3, 4],
    [5, 6, 8],
    [2, 1, 3],
    [7, 8, 15]]

Nous obtenons ainsi quelque chose qui ressemble beaucoup à un "objet mathématique" très utilisé : une matrice

À vous de jouer 4

Ecrire ci-dessous toutes les instructions qui affichent 8.

###(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

Solution
print(m[1][2])
print(m[3][1])
À vous de jouer 5

Compléter la fonction accede_valeur qui prend en paramètres un tableau tableau, et deux entiers ligne et colonne.
Cette fonction doit renvoyer l'élément de tableau, situé à la ligne ligne et à la colonne colonne.

###(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

.128013f4o)àa8Sqhy_ti,é]/n(:vP7esw6 m5-102k3=[9xbgrp;lcudE050Y0z0n0g0o0V0A0D0W0V0g0A0A0M010n0o0T010406050A0X0E0E0g0S0l040i0d0V0X0@0d0t050s0~1012140|0T04051k1d1n0s1k0|0Y0o0w0,0.0:0=0.0t0R0X0g0R0z0G0T0l0n0k1b0D0k0o0R0k0V1P0k0n0`050%0Q0V0z1w0/0;011O1Q1S1Q0n1Y1!1W0n0S1l1K0,170A0T0g0t0=0J011$1y010b0)0z0t0g0E0z1W1{1}221(251!282a0`0a0D0x0S0d0T0d0A0o1a0t0D0#1_0S0S0z0W2v1d2d0t1l0s1K2I1=1@1?1X0Y2f1z0o0t272s1W1t1v0-1%2S2U0t0d2Y1W0T2B1l2G2I2/0}1|2w2!232(0S110V1W0g1N2B0b0=030m0m0W2)0z1S2%0d0G0F0G0H0`0D0H1d0g2:2?0{2=2e2^1(2`2|2~300z32013436383a2V3d0G20040D0J3k3m1}3o2G2R013t0g2}1l2 0k313335370#3D2(3F0L3h0L3L2F3n0|3P3r0=3S3U053W3Y3z3!3C2T3E3e0c3h0c3-1e3/3p2@1x3s0d2{3T3v3X3x3Z3B3$3 3(3e0F3h0F452/3:2?3Q3@4f3{3A3#394l3c3e0C3h0C4r473;4a3?4c3u3V3w3y4z3~3b3F0y3h0y4I3N4t3q4L3R4N4e4P4g4R3}4k4U3e0h3h0h4Z2H4#492#4(4d3^3`4h3|4j4B4:0G0O3h0O4^3O4u3=4}4O3_4Q4i4A3%4D3f0I0`0H0I5a4`4v4)4 5h525j4C3F0H3g045B5r485t4~4x514S4/403f3H0H3K0s3l3.4!5G5d4w4+4y4.545N0H3*5D3,5S3M2H1o2-1d2Y2L0Y1@2Q5d4A2X1u1l2,0z2.3n5U5.4A612e0o0Y0=352G5A3v686a535k6d0D2j0z6g5y555C3-4K4|0K0`0#0b63664{230B3h6y5W4%0t0b0`0g0W0W0z0#0m0w3T0z0X0S6E6s230_040u6V5c6G0`1/0z0g0X6#4$4|6Y0p6y0D6F4|0t0`1,2U6-6A1(6:6=6@2_0`370V1b6|463N726 0`0e716W1(0d0`0G020R0n0U7f6$6^0Q0`2T0n7p6.6X0`0v6y0|795.3P6f016b2?3F3H5g7G5#6i3e206k296m7H6h5z7Q1W5,7b0=6C3I0D7)6}3Q0A0Y0`020j0X0d7n7:7=7@7;7?7o7D3o7~5G7N0m6c3e5)7M697V6o5N3*7S2a6n4T8b7Z5T7g0=7-3h7)0D0Z0t1=0q1#0v6?7~7C2;7F887I1}3F424P828a4m0G428d7U7O7X8K8i6z7,7.7(8o0D0G0D6)6+0D0z0A0n0D0X2U0D1S8(1#2y8.0n8%2x02030L0O0U270@0z0S0A7B7+82843d6e8B7W554o8M8f5M8J4o2I8j7q238m8V8o8Y6{1#0$1_760t8,0A1b8)0#0X0P0D7u0p8-8@2T1t6M0+8;1P8,9s2y75770z93808A6g964F8G998I5l4F9d898g8J9Z6r9k1(9m8W160S8 0D8v0.0D0b1b2D0o1M2B0t0w0d0o1#0V8_8{0U0q0V0q2a8r0D2t0n0X0q0D0f8-2 9q8^8`8|9I0o6M8-9N0z9F9R9v8:a9at0t9J1#aB784s9499964W9!9e5$8J4W9)8O55aP3L8y629W7V964=aQ9*9f5l4=aV9a5Na)9.7x9:8U8W0Z0P0z0E0T1!9_9U8z4u957J3e57a*aW5N57a/9$3Fb8a?6~8la_8o7l7@7m0Ubm0U0D0E0D0M0D0Nbw0H9F0L9F0c0r9F0N0F0D0p0CbI0hbEbw0J9Fbz0D0L0r0D0rb2a#b4aNb65m98aR7Pb$bd9+5l5p8R7#019;blbobqbq0D6K6M6O6Q1!6T0u0E9FbP0D0I7e8xaM9Xb#5Bb%a+aSb-3gb+a,5A6q7!8kb;bk7)5RaL9VbZca8D3e5Qcdba8Jcycicf5A7Lcm9/bj8n7)7^7|cM7`7_7}csb367b!cw3f862 8Hb,5A8c6lb(8P5(8R8Wb:6u042Baj0S1c7~6?cn6_048!6,cta@0=6Y0N7+5X6`ayd44%6Y0rd3c bi3R74179Sd86/0`bWc8800s655/605;5}1d0n5@dv2O2J0g1Zds0s5=7C0#0%0)0A04.

III. Parcourir une matrice⚓︎

Un double boucle for

Pour parcourir les éléments d'une matrice on va utiliser une "double boucle for".

À vous de jouer 6

Compléter ci-dessous pour obtenir l'affichage suivant :

la valeur aux indices ligne = 0 , colonne = 0  est  1
la valeur aux indices ligne = 0 , colonne = 1  est  3
la valeur aux indices ligne = 0 , colonne = 2  est  4
la valeur aux indices ligne = 1 , colonne = 0  est  5
la valeur aux indices ligne = 1 , colonne = 1  est  6
la valeur aux indices ligne = 1 , colonne = 2  est  8
la valeur aux indices ligne = 2 , colonne = 0  est  2
la valeur aux indices ligne = 2 , colonne = 1  est  1
la valeur aux indices ligne = 2 , colonne = 2  est  3
la valeur aux indices ligne = 3 , colonne = 0  est  7
la valeur aux indices ligne = 3 , colonne = 1  est  5
la valeur aux indices ligne = 3 , colonne = 2  est  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

Solution
m = [[1, 3, 4], 
    [5, 6, 8], 
    [2, 1, 3],
    [7, 5, 1]]

nb_colonnes = 3
nb_lignes = 4
for i in range(nb_lignes):
    for j in range(nb_colonnes):
        valeur = m[i][j]
        print("la valeur aux indices ligne =", i,", colonne =", j," est ", valeur)
À vous de jouer 7 : parcours par lignes

Ecrire la fontion get_lignequi prend en paramètres une matrice lst, et un entier i.
Cette fonction doit renvoyer la ligne i de la matrice lst.

###(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

.128013f4o)a8Sqhy_ti,é]/n(:vP7esw6 m5-12k3=[bgrp;lcudE050U0y0m0f0n0R0z0C0S0R0f0z0z0K010m0n0P010406050z0T0D0D0f0O0k040h0d0R0T0:0d0s050r0`0|0~100^0P04051g191j0r1g0^0U0n0v0(0*0,0.0*0s0N0T0f0N0y0F0P0k0m0j170C0j0n0N0j0R1L0j0m0?050Z0M0R0y1s0+0-011K1M1O1M0m1U1W1S0m0O1h1G0(130z0P0f0s0.0H011Y1u010b0#0y0s0f0D0y1S1@1_1~1!211W24260?0a0C0w0O0d0P0d0z0n160s0C0X1=0O0O0y0S2r19290s1h0r1G2E1.1:1/1T0U2b1v0n0s232o1S1p1r0)1Z2O2Q0s0d2U1S0P2x1h2C2E2+0_1^2s2W1 2!0O0}0R1S0f1J2x0b0.030l0l0S2#0y1O2Z0d0F0g0F0G0?0G190f2,2/0@2.2a2;1!2?2^2`2|0y2~01303234362R390F1|040H3f3h1_3j2C2N013o0f2_1h2{0j2}2 31330X3y2!3A0J0?0J3F2B3i0^3J3m0.3M3O053Q3S3u3U3x2P3z3a0c0?0c3%1a3)3k2:1t3n0d2@3N3q3R3s3T3w3W3_3Y3a0E0?0E3 2+3*2/3K3.493=3v3V354f383a0B0?0B4l413+443-463p3P3r3t4t3^373A0x0?0x4C3H4n3l4F3L4H484J4a4L3@4e4O3a0g0?0g4T2D1k2)192U2H0U1:2M3,014u2T1q1h2(0y2*3i3(3H054u542a0n0U0.312C3A3c4J5c5e4d4v4*3b1}2f0y5l4u3X4x5p2E3g423K0I0?0X0b564:4E2X010A0?0C5G5a435J0s0b0?1B0m0l1(2Q5O5A4|0=040t5!5I2=0?0$0m5*4o5$0?0o5O5N5+3n0?0n5:4W5J5%0e5^5#4X0d0?0F020N0m0Q635`3-0M5-0n0z5/403H5_5;4X5%0u5O0^6l5H4o5k015f2/3A3C3:0C6x4(5n3`3B5q255s6y5m5v6B1S0r5z6e5K5M0C6X5~5Q1 0z0U0?020i0T0d6b6)6+6-6*6,6c6u3j6@5A6F0l5g3a3!5j5d6N5u4w3Z6K265t4N6I6 3%6U6$6W6X0V0s1.0p0y0%0u5N6@6t2-3J6{6}0F3|70784)6I3|0C5r7y6H4g7v6R6T6o5J7e046X7O0C0F0C5.0C7n0T2Q7S6i0m1X2u1O6j7l6s6Z6E716z1_3A4i7x72797G4i7C6L7E6P4h7I5P3K7M7P6X7R0n7U7W0C230:0y0O7*6_7s7-6|6A4y3q6{735o4z7`777?7z7G4z5y804|827O120O8b7U0C7W1X7%7!2t170m7S7l0C0p0R0p267i0%0z8L8N0%8Q8S8a0%7$2{5Y1X5}7p7+7t8j0F4Q7=6G7}8;766M8@743a8=7c7K6#6%7N7O6.6=966:6/6?4m8.8h7u4,8?6O8}398`7|9j9g3F7P645J5C042x0m0T0O186@6n5 5,045.7+5=040L9G4X0s5|9K600?0q8e2-0r594;534?50190m4_9!2K2F0f1V9X0r4@6t0X0Z0#0z04.
À vous de jouer 8 : parcours par colonnes

Compléter la fonction get_colonne qui prend en paramètres une matrice matrice, un entier colonne et renvoie la liste des éléments de la colonne colonne

Par exemple :

>>> m = [[1, 3, 4],
    [5, 6, 8],
    [2, 1, 3],
    [7, 8, 15]]
>>> get_colonne(m, 0)
[1, 5, 2, 7]
>>> get_colonne(m, 2)
[4, 8, 3, 15]
>>> 

###(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

.128013f4o)a8Sqhy_ti,é]/n(:vP7esw6 m5-102k3=[9bgrp;l*cudE050X0y0m0f0n0T0z0C0V0T0f0z0z0L010m0n0R010406050z0W0D0D0f0Q0k040h0d0T0W0?0d0s050r0}0 11130{0R04051j1c1m0r1j0{0X0n0v0+0-0/0;0-0s0P0W0f0P0y0F0R0k0m0j1a0C0j0n0P0j0T1O0j0m0_050$0O0T0y1v0.0:011N1P1R1P0m1X1Z1V0m0Q1k1J0+160z0R0f0s0;0I011#1x010b0(0y0s0f0D0y1V1`1|211%241Z27290_0a0C0w0Q0d0R0d0z0n190s0C0!1^0Q0Q0y0V2u1c2c0s1k0r1J2H1;1?1=1W0X2e1y0n0s262r1V1s1u0,1$2R2T0s0d2X1V0R2A1k2F2H2.0|1{2v2Z222%0Q100T1V0f1M2A0b0;030l0l0V2(0y1R2$0d0F0G0H3c0_0G1c0f2/2=0`2;2d2@1%2_2{2}2 0y3101333537392U3c3e1 040I3i3k1|3m2F2Q013r0f2|1k2~0j303234360!3B2%3D0F0K0_0K3I2E3l0{3M3p0;3P3R053T3V3x3X3A2S3C3d0F0c0_0c3+1d3-3n2?1w3q0d2`3Q3t3U3v3W3z3Z3}3#3 0E0_0E442.3.2=3N3=4e3_3y3Y384k3b3 0B0_0B4q463/493;4b3s3S3u3w4y3|3a3$0x0_0x4H3K4s3o4K3O4M4d4O4f4Q3{4j4T3 0g0_0g4Y2G4!482!4%4c3?3^4g3`4i4A4/3e0N0_0N4@2H2+0y2H2X2K0X1?2P3:014z2W1t1k5b2-3l3,3K054z5q2d0n0X0;342F3$0G3t5y5A523!4C3e5E0C2i0y5H4z5J5D1V0r3j473N0J0_0!0b5s2G5X5j0A0_0C5%5w4`2^0b0_1E0m3z0T1a2T5.5)4$0^040t5}4J4{0s0_101;0n0V0y634t5j600o5.5-642^0_0s5_5{6c455t6k1%600e6i5~4{0d0_0F020P0m0S6x6t3;0O0_1R0z0m6H6e5 0_0u5.0{6r5(3M5G015B2=3$3F3@0C6Z4-533~3E205O5Q4S6.0F6(5V5/3N5+040C6 5-6W6{5j0z0X0_020i0W0d6F787a7c797b6G726V2:6Y5z6!0l5C3 3(4O6+5I4B3$3(5N285P7o5R7w7r5U5W6I01755,700Y0s1;0p1!0u0C680Q6a7R0C0W2T0C6M0m1!2x7$0y0z0o7Y2v260?0y0Q5N6o0s7!1Z5N0~0p2o2w1!0-1^5`7_6q4r6d5x7n6#1|3$417t8a7v54406:7A6=4.6@8e3+7I7K6~70150Q7;0C7S36847!7S7Z810n6N7(1a0m7#7+0C0p0T0p297O0*0z8J8L0*8O8Q7:0*7)2~8A6p7|0D7~0d7@8(856U882v7u7q3e4n8f8m6-4l8_8k298|5S4m7G734$8s700C7d7h9b7f7e7i87725X8@6$4D5F8g7D8i4E7z917C6?8~0F4E2H3j996y6l048/5|726j6Q6z0_0L6P4#4{600M8=3N0D0n0_0H9S6f0_0q9N5:1%6A040U9$4u6K042h9Y6R619;65670f696b9@226v8;9i7m5H8^0F4V8{9u8n9w4V9s7B6,933ea63I9B7I5Z040b4b9,5j66040nap4$0d6}2Sau659.0Q1|1E9}6u0_62a19J2^9.9:aJ9O9~aHaF3;9_9{865r7I6v6w9H9CaG046T7j9S9k8c4:9n927E3e4;aca:8i4;9z8t996 a$aT9E166paS019Qb4arataO9%0;609#a#7I9)9MbfaK3qaU7V9|ba3Nb6bpaq0_b97lbkbc9!9Rbs4$ar6n9FaW6sbxb59!a0bw89a39l55a/a88}5K0F56a@bSafbV95ajbIal2A0m0W0Q1bbjaPblb18BbG4^5}0r5v1n2,1c5e1c0m5gb 2N2I0f1Y5cb}5n6V0!0$0(0z04.

Auteurs : Mireille Coilhac et Jean-Louis Thirot