Aller au contenu

Aplatir un tableau⚓︎

On considère un tableau à deux dimensions (on dit aussi une matrice), non vide, rempli de nombres et l'on souhaite l'aplatir, c'est-à-dire le transformer en un tableau à une seule ligne.

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

\[ \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 \(1 \times 12\)

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

Les tableaux de départ seront représentés par des listes de listes Python. Ainsi le premier tableau ci-dessus sera représenté par :

🐍 Script Python
tableau = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

Les tableaux "aplatis", sur une seule ligne, seront représentés par une simple liste Python. Le second tableau ci-dessus sera représenté par :

🐍 Script Python
aplati = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Écrire la fonction aplatir prenant en argument une liste de listes tableau et renvoyant une liste dans laquelle toutes les valeurs de tableau sont données à la suite les unes des autres.

Exemples
🐍 Console Python
>>> aplatir([[1, 2, 3, 4], [5, 6, 7, 8]])
[1, 2, 3, 4, 5, 6, 7, 8]
>>> aplatir([[1], [2], [3], [4], [5], [6]])
[1, 2, 3, 4, 5, 6]
###
# Testsbksl-nlassert aplatir([[1, 2, 3, 4], [5, 6, 7, 8]]) == [1, 2, 3, 4, 5, 6, 7, 8]bksl-nlassert aplatir([[1, 2, 3], [4, 5, 6]]) == [1, 2, 3, 4, 5, 6]bksl-nlassert aplatir([[1, 2], [3, 4], [5, 6]]) == [1, 2, 3, 4, 5, 6]bksl-nlassert aplatir([[1], [2], [3], [4], [5], [6]]) == [1, 2, 3, 4, 5, 6]bksl-nlbksl-nl# Tests supplémentairesbksl-nlassert aplatir([[8, 7], [6, 5], [4, 3]]) == [8, 7, 6, 5, 4, 3]bksl-nlassert aplatir([[1], [2], [3]]) == [1, 2, 3]bksl-nlassert aplatir([[1, 1], [2, 2], [3, 3]]) == [1, 1, 2, 2, 3, 3]bksl-nlassert aplatir([[1, 1]]) == [1, 1]bksl-nlbksl-nl 5/5

def aplatir(tableau):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert aplatir([[1, 2, 3, 4], [5, 6, 7, 8]]) == [1, 2, 3, 4, 5, 6, 7, 8]bksl-nlassert aplatir([[1, 2, 3], [4, 5, 6]]) == [1, 2, 3, 4, 5, 6]bksl-nlassert aplatir([[1, 2], [3, 4], [5, 6]]) == [1, 2, 3, 4, 5, 6]bksl-nlassert aplatir([[1], [2], [3], [4], [5], [6]]) == [1, 2, 3, 4, 5, 6]bksl-nlbksl-nldef aplatir(tableau):bksl-nl resultat = []bksl-nl for ligne in tableau:bksl-nl for valeur in ligne:bksl-nl resultat.append(valeur)bksl-nl return resultatbksl-nlbksl-nl

A

Cet exercice demande de coder une fonction approchant la méthode flatten du module numpy.

Une solution⚓︎

Dans la fonction aplatir on parcourt l'ensemble des lignes et des valeurs de tableau en l'on ajoute les valeurs au fur et à mesure dans une liste resultat.

Variante avec extend⚓︎

🐍 Script Python
def aplatir(tableau):
    resultat = []
    for ligne in tableau:
        resultat.extend(ligne)
    return resultat

Variante avec une double compréhension⚓︎

🐍 Script Python
def aplatir(tableau):
    return [element for ligne in matrice for element in ligne]

Z