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:p(40ed3; 1jo5_An)h]6,qc[yCuvà8i2+Dxms7=wlSatf-9ORrg.éPkbè/050h0g0T0S0G0Q0M0k0y0Q0S0M0M0O010T0G0c010406050M0C0L0L0S0Z0A040R0n0Q0C0 0n0r0k020S0L0c0j0k0Y0g190Z0x0C0g0M050+16181a1c140c041A1H051K0+1K1M1H140h0G0D0@0_0{0}0t0G0!0t0Q1!0t0T12050/0)0Q0g1V0`0|011Z1#1%1#0T1-1/1+0T0)0n0h1c1,0Z1I0T0t0@1f0M0c0S0r0}0H011;1X010U0;0g0r1n0g1+2c2e2j1?2m1/2p0L2r040a0k0%0Z0n0c0n0M0G1i1k0-2a0Z0Z0g0y2M1A2t0r1I0+282Y0T2625270h2v0}1%0r2o2J1+1S1U0^1=2,0G2.0r221T1+0c2R1I2W2Y33152d1k2@2k2|0Z190Q120k0l2V3713362u391?3b3d3f0H3i2e3k2W2+013p0S3e040k0i3t2X143w3n0}3z3B0k0e3F3v373x3L3f0o3P3H3R3J3y0n3c3A3f0v3W3l381W3o3#3q3C0N3*3I3-3K3/3%3C0F3?3Y3^3!3$3M0W3~3m403T040l0f453,2^413:0l3h1B3j3X464e480l3s4j3u1J311A2=2#0h2)3x0y222B0,1T1I300g323j3P054B0-4J4m2k0(120-0U4L3@4e0P3f4W3 4n0U122R1S2A0r2K1j2.0Z4#4Q1?11040d4=4d3a121}0g0S0C4{3x4^0w3P0k3+3S122|0C0D0g0Q1/0p0_0Z0!0g0C4;4r2X593Z55575r475b0n5d5f5h0t510T5m5o354X2k4^0s0b3W0k5O585I3o5x5z510p1-5u5R0}0n120O5Y4$5J120z0z533Z0L0G124b5p3C5v4e4S040U3#5(4?3K120m5 4|1?0n4Z042`643S0)4)2e5l5.404^4`5@5_4}045c5e5g0g5i1a5l5n6h4e5K0u6b3Z5{5}5G3j5Q5)5S696B4067126a5@6H603y6d040Z6f0g6x5*4_6Z6J6p5A6s5C1h5F6$0}6z3W065P6R65616K6l5Z015t6Q6m6J636 6|5#045%736I0}5:5=6.6}1256786S7b045?336=5P700}6D5~7h6^3y121`2.6L4e6N690r7z6n4 517d4^5M5@7n6?5O7p017r6F3u6@5a040D3A6-7t3x7B6P337U3Z0r7w1!7y6{797e047K7m7N7^7)405{0G4V7!7*627E665$777(7P7+6o5y6q5h5j6v7S5q6|7J5N7_8k876O825!120I856G7P7j4i7@8k7_8m047286745$8o017j7l4k8y7o6|886(5V5X7/6S4^5-8S7u880G7I120u8V5H7:888C4K8h8#8G758s7T8A7X1/6w7L8L7O8N817 6M8q8;2X7`4e8v8j8|7:5{2R0T5n7D8 4n5T5e8Q0S0)3*0+4N4I4t9p0+4w1A0T4y9u2%2Z21232#9k1/2Y4w1G4P7u2R0L0p0U0S0(6*0i121s1u1w1y0k7?4K1N3k1H0B0.0k0g0K0g0Z0y0G0y1:0-190r2O2O9o0Z0k0C2.0k5}0r2T0G1j0k0S0c300n0y5C0r0T0k0_0k0L0$284C589o3x1^1$1(1*9I7V2R0M5C0c6Y6l9n4C3C0h0Cag220C1/alak3Zao1`1)2s8)5b170c0A4LaA4O0#1J9#040X380n182o9:0k2d9{0y0Z0$9,9|1k8PaE7GaE0D0G2O510K0k210r2.0?4+2o4.4-aY9!9Ha$a,1a4B5nadb70C2L1:0Q002e9.2o0ka`0k0d1/0?7x9W0cbkbx9W8@5Fb52e0?aa0S9Vae7-0g0s9)383A0yaH2eadbw2a3#0h4/a;b5bm0S0@5AaH1:4B2Q1y2I9@bV9;aEa^bs9D500Cba1Q1L040%5ya.1:9N0G2R0w0k0E0@5CbL6(6r0kbE5nc9a4510!4,5Eae002`1Sa+2Oaf4B0Q4/9;bHaebK1xcg2`0M0$2R0Zb~a!0R0Gb*1g0G0V9.9)0Mad0$0!3AcacC0kcfaI8d5Fc99:af2K0!0r7}0G1:bLbncl9 2`cO2O9K0c1%9{9}b-1fcz0kaDc$8ab|b`1.b|0#0k0JcBa+0y0`0ka42d0{1:cbafby0k161Tb?bu4MaK40aMaqaP6S8Y8/918G968W54120saV9o3C9(a42R4Ba)a1dpc#4H5:0*2R2acyb31:4`amaL1(aNar8A8+8=8E76dI5;7kdOaB0scL9H0qc#2m2Nb(9 1ja21jck1k2R0r0D0nc=ae1:b_a`d 4v0.0:0=04.