Listes de listes

Tableau

Travailler avec les interfaces graphiques nécessite souvent d'avoir recours à des tableaux, en particulier pour représenter des grilles (plateaux) de jeu.

On considère donc le tableau ci-contre, contenant la liste alphabétique des caractères de 'a' à 'x'. On rappelle que la case (1 ; 5) contient le caractère 'n'.

Pour représenter efficacement ce tableau dans un programme, on utilise une liste de listes affectée à une variable cases (par exemple) :

cases = [['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
         ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'],
         ['q', 'r', 's', 't', 'u', 'v', 'w', 'x']]

Ainsi, cases est une liste des lignes du tableau, et chaque ligne est une liste des cases qu'elle contient. Les espaces, indentations et sauts à la ligne permettent une meilleure «vision» de cette liste de listes et ne sont pas interprétés par Python.

Anticipez, sur un papier, l'affichage qui sera obtenu lors de l'exécution des instructions ci-dessous. Vérifiez ensuite chaque réponse à l'aide de votre interpréteur Python.

  1. print(cases[1][5]) affiche...
  2. print(cases[2]) affiche...
  3. print(cases[2][0]) affiche...
  4. print(cases[0]) affiche...
  5. print(cases[0][2]) affiche...
  6. print(cases[5][1]) affiche...

Lorsqu'on manipule une (ou plusieurs) liste de listes, il est indispensable d'avoir un affichage agréable des éléments de cette liste. Testez le programme ci-dessous puis modifiez-le pour chaque nouvelle ligne (liste !) apparaisse sous la précédente :

cases = [['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], 
         ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'], 
         ['q', 'r', 's', 't', 'u', 'v', 'w', 'x']]

print(cases)
Une piste ?

Chaque sous-liste est un élément de la liste principale.

Une autre piste ?

Essayez de trouver par vous-même avant de vous précipiter sur la solution !

Solution
cases = [['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
         ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p'],
         ['q', 'r', 's', 't', 'u', 'v', 'w', 'x']]

for ligne in cases:
    print(ligne)