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
.128013s3_8èufvy n7aS1me(P24C:jtwi]D[h)6Oo;bcdg/0làqAp.r-,=+k95Rxé050N0r0z0n0B0R0b0k0M0R0n0b0b0!010z0B0V010406050b0g0q0q0n0X0j040o0J0R0g0 0J0l0k020n0q0V0K0k0)0r190X0T0g0r0b050P16181a1c140V041A1H051K0P1K1M1H140N0B0i0@0_0{0}0F0B0O0F0R1!0F0z12050/0L0R0r1V0`0|011Z1#1%1#0z1-1/1+0z0L0J0N1c1,0X1I0z0F0@1f0b0V0n0l0}0u011;1X010h0;0r0l1n0r1+2c2e2j1?2m1/2p0q2r040a0k0t0X0J0V0J0b0B1i1k0-2a0X0X0r0M2M1A2t0l1I0P282Y0z2625270N2v0}1%0l2o2J1+1S1U0^1=2,0B2.0l221T1+0V2R1I2W2Y33152d1k2@2k2|0X190R120k0p2V3713362u391?3b3d3f0u3i2e3k2W2+013p0n3e040k0c3t2X143w3n0}3z3B0k0v3F3v373x3L3f0(3P3H3R3J3y0J3c3A3f0H3W3l381W3o3#3q3C0m3*3I3-3K3/3%3C0e3?3Y3^3!3$3M0%3~3m403T040p0Q453,2^413:0p3h1B3j3X464e480p3s4j3u1J311A2=2#0N2)3x0M222B0,1T1I300r323j3P054B0-4J4m2k0$120-0h4L3@4e0A3f4W3 4n0h122R1S2A0l2K1j2.0X4#4Q1?11040s4=4d3a121}0r0n0g4{3x4^0Z3P0k3+3S122|0g0i0r0R1/0d0_0X0O0r0g4;4r2X593Z55575r475b0J5d5f5h0F510z5m5o354X2k4^0G0x3W0k5O585I3o5x5z510d1-5u5R0}0J120!5Y4$5J120E0E533Z0q0B124b5p3C5v4e4S040h3#5(4?3K120y5 4|1?0J4Z042`643S0L4)2e5l5.404^4`5@5_4}045c5e5g0r5i1a5l5n6h4e5K0C6b3Z5{5}5G3j5Q5)5S696B4067126a5@6H603y6d040X6f0r6x5*4_6Z6J6p5A6s5C1h5F6$0}6z3W065P6R65616K6l5Z015t6Q6m6J636 6|5#045%736I0}5:5=6.6}1256786S7b045?336=5P700}6D5~7h6^3y121`2.6L4e6N690l7z6n4 517d4^5M5@7n6?5O7p017r6F3u6@5a040i3A6-7t3x7B6P337U3Z0l7w1!7y6{797e047K7m7N7^7)405{0B4V7!7*627E665$777(7P7+6o5y6q5h5j6v7S5q6|7J5N7_8k876O825!120#856G7P7j4i7@8k7_8m047286745$8o017j7l4k8y7o6|886(5V5X7/6S4^5-8S7u880B7I120C8V5H7:888C4K8h8#8G758s7T8A7X1/6w7L8L7O8N817 6M8q8;2X7`4e8v8j8|7:5{2R0z5n7D8 4n5T5e8Q0n0L3*0P4N4I4t9p0P4w1A0z4y9u2%2Z21232#9k1/2Y4w1G4P7u2R0q0d0h0n0$6*0c121s1u1w1y0k7?4K1N3k1H0w0.0k0r0*0r0X0M0B0M1:0-190l2O2O9o0X0k0g2.0k5}0l2T0B1j0k0n0V300J0M5C0l0z0k0_0k0q0+284C589o3x1^1$1(1*9I7V2R0b5C0V6Y6l9n4C3C0N0gag220g1/alak3Zao1`1)2s8)5b170V0j4LaA4O0W1J9#040I380J182o9:0k2d9{0M0X0+9,9|1k8PaE7GaE0i0B2O510*0k210l2.0?4+2o4.4-aY9!9Ha$a,1a4B5nadb70g2L1:0R002e9.2o0ka`0k0s1/0?7x9W0Vbkbx9W8@5Fb52e0?aa0n9Vae7-0r0G9)383A0MaH2eadbw2a3#0N4/a;b5bm0n0@5AaH1:4B2Q1y2I9@bV9;aEa^bs9D500gba1Q1L040t5ya.1:9N0B2R0Z0k0S0@5CbL6(6r0kbE5nc9a4510O4,5Eae002`1Sa+2Oaf4B0R4/9;bHaebK1xcg2`0b0+2R0Xb~a!0o0Bb*1g0B0Y9.9)0bad0+0O3AcacC0kcfaI8d5Fc99:af2K0O0l7}0B1:bLbncl9 2`cO2O9K0V1%9{9}b-1fcz0kaDc$8ab|b`1.b|0W0k0DcBa+0M0`0ka42d0{1:cbafby0k161Tb?bu4MaK40aMaqaP6S8Y8/918G968W54120GaV9o3C9(a42R4Ba)a1dpc#4H5:0f2R2acyb31:4`amaL1(aNar8A8+8=8E76dI5;7kdOaB0GcL9H0Uc#2m2Nb(9 1ja21jck1k2R0l0i0Jc=ae1:b_a`d 4v0.0:0=04.