Aller au contenu

Partie 2 : Les tableaux (listes Python)


Un tableau est une collection ordonnée et modifiable d'éléments du même type. En Python, on utilise le type list pour représenter les tableaux.

>>> notes = [15, 12, 18, 9, 14]
>>> prenoms = ["Alice", "Bob", "Charlie"]
>>> vide = []
TupleTableau (liste)
Syntaxe(a, b, c)[a, b, c]
ModifiableNonOui
Types mélangésOuiNon (en NSI)
UsageDonnées constantesCollections de données

Les indices commencent à 0 :

>>> notes = [15, 12, 18, 9, 14]
>>> notes[0] # premier élément
15
>>> notes[2] # troisième élément
18
>>> notes[-1] # dernier élément
14
>>> notes[-2] # avant-dernier
9

Contrairement aux tuples, on peut modifier un élément :

>>> notes = [15, 12, 18, 9, 14]
>>> notes[3] = 11
>>> notes
[15, 12, 18, 11, 14]
>>> len(notes)
5

On peut extraire une portion du tableau :

>>> notes = [15, 12, 18, 9, 14]
>>> notes[1:3] # indices 1 et 2 (le 3 est exclu)
[12, 18]
>>> notes[:3] # du début jusqu'à l'indice 2
[15, 12, 18]
>>> notes[2:] # de l'indice 2 jusqu'à la fin
[18, 9, 14]

notes = [15, 12, 18, 9, 14]
for note in notes:
print(note)
notes = [15, 12, 18, 9, 14]
for i in range(len(notes)):
print(f"notes[{i}] = {notes[i]}")
SituationParcours adapté
Lire les valeursPar élément (for x in t)
Modifier les valeursPar indice (for i in range(len(t)))
Comparer deux tableaux élément par élémentPar indice
Accéder à l'indice et à la valeurenumerate
notes = [15, 12, 18, 9, 14]
for i, note in enumerate(notes):
print(f"Note n°{i + 1} : {note}")

>>> t = [1, 2, 3]
>>> t.append(4) # ajouter à la fin
>>> t
[1, 2, 3, 4]
>>> t.insert(1, 10) # insérer 10 à l'indice 1
>>> t
[1, 10, 2, 3, 4]
>>> t.pop() # retirer le dernier
4
>>> t
[1, 10, 2, 3]
>>> t.pop(1) # retirer l'élément d'indice 1
10
>>> t
[1, 2, 3]
>>> t.remove(2) # retirer la première occurrence de 2
>>> t
[1, 3]
>>> [1, 2] + [3, 4] # concaténation
[1, 2, 3, 4]
>>> [0] * 5 # répétition
[0, 0, 0, 0, 0]
>>> 3 in [1, 2, 3, 4] # appartenance
True
>>> t = [3, 1, 4, 1, 5]
>>> t.sort() # tri en place
>>> t
[1, 1, 3, 4, 5]
>>> t.reverse() # inversion en place
>>> t
[5, 4, 3, 1, 1]
>>> sorted([3, 1, 4]) # tri sans modifier l'original
[1, 3, 4]

La compréhension de liste est une syntaxe compacte pour construire un tableau à partir d'une règle :

# Syntaxe : [expression for variable in itérable]
>>> carres = [x ** 2 for x in range(6)]
>>> carres
[0, 1, 4, 9, 16, 25]

C'est équivalent à :

carres = []
for x in range(6):
carres.append(x ** 2)

On peut ajouter une condition avec if :

# Syntaxe : [expression for variable in itérable if condition]
>>> pairs = [x for x in range(10) if x % 2 == 0]
>>> pairs
[0, 2, 4, 6, 8]
>>> grands = [note for note in notes if note >= 14]
>>> grands
[15, 18, 14]
# Table de multiplication par 7
>>> table7 = [7 * i for i in range(11)]
>>> table7
[0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 70]
# Mettre en majuscules
>>> mots = ["bonjour", "python", "nsi"]
>>> majuscules = [m.upper() for m in mots]
>>> majuscules
['BONJOUR', 'PYTHON', 'NSI']
# Initiales d'une liste de prénoms
>>> prenoms = ["Alice", "Bob", "Charlie"]
>>> initiales = [p[0] for p in prenoms]
>>> initiales
['A', 'B', 'C']

Un tableau de tableaux permet de représenter une grille (ou matrice) à deux dimensions :

matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]

Cette matrice représente :

1 2 3
4 5 6
7 8 9

On utilise deux indices : matrice[ligne][colonne].

>>> matrice[0] # première ligne
[1, 2, 3]
>>> matrice[0][2] # ligne 0, colonne 2
3
>>> matrice[2][1] # ligne 2, colonne 1
8
matrice = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Parcours avec double boucle
for i in range(len(matrice)):
for j in range(len(matrice[i])):
print(matrice[i][j], end=" ")
print()
# Matrice 3x4 remplie de 0
>>> zeros = [[0 for j in range(4)] for i in range(3)]
>>> zeros
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Une image en niveaux de gris peut se représenter comme une matrice de valeurs entre 0 (noir) et 255 (blanc) :

image = [
[0, 0, 0, 0, 0],
[0, 255, 255, 255, 0],
[0, 255, 0, 255, 0],
[0, 255, 255, 255, 0],
[0, 0, 0, 0, 0]
]
# Négatif de l'image
negatif = [[255 - pixel for pixel in ligne] for ligne in image]

Affecter un tableau à une nouvelle variable ne crée pas de copie : les deux variables pointent vers le même objet en mémoire.

>>> a = [1, 2, 3]
>>> b = a # b est un alias de a
>>> b[0] = 99
>>> a
[99, 2, 3] # a est aussi modifié !
>>> a = [1, 2, 3]
>>> b = list(a) # copie
>>> b = a[:] # autre façon de copier
>>> b[0] = 99
>>> a
[1, 2, 3] # a n'est pas modifié

PropriétéTableau (list)
Syntaxe[a, b, c]
OrdonnéOui
ModifiableOui (mutable)
Accèst[i], t[i:j]
Ajoutt.append(x), t.insert(i, x)
Suppressiont.pop(), t.remove(x)
Compréhension[expr for x in iterable if cond]
Matricem[i][j] (tableau de tableaux)
Copielist(t) ou t[:] (pas b = a)