Redimensionner un tableau

On considère un tableau de dimensions \(l_1 \times h_1\) (largeur \(l_1 > 0\) et hauteur \(h_1 > 0\)) et l'on souhaite modifier ses dimensions afin de créer un nouveau tableau de dimensions \(l_2 \times h_2\).

Bien entendu, les deux tableaux contiendront autant de valeurs l'un et l'autre. On garantit donc que l'on aura toujours \(l_1 \times h_1 = l_2 \times h_2\). Les éléments du nouveau tableau seront identiques à ceux du premier : lire les valeurs, ligne par ligne et de gauche à droite dans les deux tableaux donnera le même résultat.

Par exemple, le tableau de dimensions \(4 \times 3\) :

\[ \begin{array}{|c|c|c|c|} \hline 1&2&3&4\\ \hline 5&6&7&8\\ \hline 9&10&11&12\\ \hline \end{array} \]

pourra être transformé en un nouveau tableau de dimensions \(6 \times 2\) :

\[ \begin{array}{|c|c|c|c|c|c|} \hline 1&2&3&4&5&6\\ \hline 7&8&9&10&11&12\\ \hline \end{array} \]

Les tableaux seront représentés par des listes de listes Python. Ainsi les deux tableaux ci-dessus seront représentés par :

tab_1 = [
    [1,  2,  3,  4],
    [5,  6,  7,  8],
    [9, 10, 11, 12]
    ]
tab_2 = [
    [1, 2, 3,  4,  5,  6],
    [7, 8, 9, 10, 11, 12]
    ]

On doit tout d'abord créer un nouveau tableau aux bonnes dimensions. Le code Python ci-dessous permet de créer un tableau de 3 lignes sur 5 colonnes rempli de 0 :

tab_vide = [[0 for j in range(5)] for i in range(3)]

On doit ensuite mettre en correspondance les cellules du premier tableau et celles du second. Pour cela on propose la méthode suivante :

  • on crée des coordonnées, par exemple i et j. i est initialisée à 0, j à 0 ;

  • on parcourt l'ensemble des lignes et, pour chacune, l'ensemble des valeurs du tableau de départ ;

  • à chaque itération :

    • si j est égal à la nouvelle largeur, on passe à la ligne suivante (i += 1) et on recommence à la première colonne (j = 0),

    • on insère dans la cellule de coordonnées i et j du nouveau tableau la valeur lue dans la boucle,

    • on incrémente j pour passer à une nouvelle colonne.

Écrire la fonction redimensionner prenant en paramètres :

  • le tableau tableau à redimensionner sous forme d'une liste de listes, toutes non vides ;

  • la nouvelle largeur nouvelle_largeur ;

  • la nouvelle hauteur nouvelle_hauteur.

Cette fonction renvoie un nouveau tableau redimensionné sous forme d'une liste de listes.

Exemples
>>> tab = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> redimensionner(tab, 6, 2)
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12]]
>>> redimensionner(tab, 3, 4)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
###(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 : 10/10
.128013à[3è4.nx/R8p)0hCDv7c256Ag9f=buS-,_l(wOaPké;:ors1qmyd]ji te+050!0*0)0N0%0J0V0(0u0J0N0V0V0C010)0%0m010406050V0E0Y0Y0N0U0Z040F0T0J0E0 0T0h0(020N0Y0m0R0(0k0*190U0X0E0*0V050j16181a1c140m041A1H051K0j1K1M1H140!0%0s0@0_0{0}0p0%0z0p0J1!0p0)12050/0D0J0*1V0`0|011Z1#1%1#0)1-1/1+0)0D0T0!1c1,0U1I0)0p0@1f0V0m0N0h0}0v011;1X010B0;0*0h1n0*1+2c2e2j1?2m1/2p0Y2r040a0(0O0U0T0m0T0V0%1i1k0-2a0U0U0*0u2M1A2t0h1I0j282Y0)2625270!2v0}1%0h2o2J1+1S1U0^1=2,0%2.0h221T1+0m2R1I2W2Y33152d1k2@2k2|0U190J120(0W2V3713362u391?3b3d3f0v3i2e3k2W2+013p0N3e040(0d3t2X143w3n0}3z3B0(0f3F3v373x3L3f0w3P3H3R3J3y0T3c3A3f0x3W3l381W3o3#3q3C0t3*3I3-3K3/3%3C0l3?3Y3^3!3$3M0A3~3m403T040W0o453,2^413:0W3h1B3j3X464e480W3s4j3u1J311A2=2#0!2)3x0u222B0,1T1I300*323j3P054B0-4J4m2k0P120-0B4L3@4e0L3f4W3 4n0B122R1S2A0h2K1j2.0U4#4Q1?11040K4=4d3a121}0*0N0E4{3x4^0H3P0(3+3S122|0E0s0*0J1/0I0_0U0z0*0E4;4r2X593Z55575r475b0T5d5f5h0p510)5m5o354X2k4^0n0S3W0(5O585I3o5x5z510I1-5u5R0}0T120C5Y4$5J120c0c533Z0Y0%124b5p3C5v4e4S040B3#5(4?3K120$5 4|1?0T4Z042`643S0D4)2e5l5.404^4`5@5_4}045c5e5g0*5i1a5l5n6h4e5K0#6b3Z5{5}5G3j5Q5)5S696B4067126a5@6H603y6d040U6f0*6x5*4_6Z6J6p5A6s5C1h5F6$0}6z3W065P6R65616K6l5Z015t6Q6m6J636 6|5#045%736I0}5:5=6.6}1256786S7b045?336=5P700}6D5~7h6^3y121`2.6L4e6N690h7z6n4 517d4^5M5@7n6?5O7p017r6F3u6@5a040s3A6-7t3x7B6P337U3Z0h7w1!7y6{797e047K7m7N7^7)405{0%4V7!7*627E665$777(7P7+6o5y6q5h5j6v7S5q6|7J5N7_8k876O825!120+856G7P7j4i7@8k7_8m047286745$8o017j7l4k8y7o6|886(5V5X7/6S4^5-8S7u880%7I120#8V5H7:888C4K8h8#8G758s7T8A7X1/6w7L8L7O8N817 6M8q8;2X7`4e8v8j8|7:5{2R0)5n7D8 4n5T5e8Q0N0D3*0j4N4I4t9p0j4w1A0)4y9u2%2Z21232#9k1/2Y4w1G4P7u2R0Y0I0B0N0P6*0d121s1u1w1y0(7?4K1N3k1H0q0.0(0*0i0*0U0u0%0u1:0-190h2O2O9o0U0(0E2.0(5}0h2T0%1j0(0N0m300T0u5C0h0)0(0_0(0Y0Q284C589o3x1^1$1(1*9I7V2R0V5C0m6Y6l9n4C3C0!0Eag220E1/alak3Zao1`1)2s8)5b170m0Z4LaA4O0g1J9#040M380T182o9:0(2d9{0u0U0Q9,9|1k8PaE7GaE0s0%2O510i0(210h2.0?4+2o4.4-aY9!9Ha$a,1a4B5nadb70E2L1:0J002e9.2o0(a`0(0K1/0?7x9W0mbkbx9W8@5Fb52e0?aa0N9Vae7-0*0n9)383A0uaH2eadbw2a3#0!4/a;b5bm0N0@5AaH1:4B2Q1y2I9@bV9;aEa^bs9D500Eba1Q1L040O5ya.1:9N0%2R0H0(0b0@5CbL6(6r0(bE5nc9a4510z4,5Eae002`1Sa+2Oaf4B0J4/9;bHaebK1xcg2`0V0Q2R0Ub~a!0F0%b*1g0%0G9.9)0Vad0Q0z3AcacC0(cfaI8d5Fc99:af2K0z0h7}0%1:bLbncl9 2`cO2O9K0m1%9{9}b-1fcz0(aDc$8ab|b`1.b|0g0(0rcBa+0u0`0(a42d0{1:cbafby0(161Tb?bu4MaK40aMaqaP6S8Y8/918G968W54120naV9o3C9(a42R4Ba)a1dpc#4H5:0e2R2acyb31:4`amaL1(aNar8A8+8=8E76dI5;7kdOaB0ncL9H0yc#2m2Nb(9 1ja21jck1k2R0h0s0Tc=ae1:b_a`d 4v0.0:0=04.