Des listes et pas des tableaux
Contrairement à d’autres langages, Python propose des listes et non des tableaux. Cela a certains avantages :
– pas besoin de déclaration une taille de tableaux
– gestion dynamique de la liste
– des listes hétérogènes de différents types
– des opérations sur les listes (programmation objet).
Création de listes à une dimension
On peut tout d’abord créer une liste vide puis lui ajouter des éléments :
>>> A=[] >>> print(A) [] >>> A.append(5) >>> A.append("sept") >>> print(A) [5, 'sept']
On peut aussi directement créer une liste de façon exhaustive :
>>> B=[3,7,"deux",3.14] >>> print(B) [3, 7, 'deux', 3.14] >>> print(B[1]) 7
Pour créer des listes plus longues, on peut utiliser les compréhensions de listes :
>>> C=[0 for i in range(5)] >>> print(C) [0, 0, 0, 0, 0
NB : la syntaxe C=5*[0] fonctionne mais est à déconseiller car elle va entraîner des erreurs pour les tableaux à deux dimensions.
Enfin, on peut créer un tableau par copie de tableau. Mais attention à la syntaxe !
>>> D=[1,2,3] >>> E=D >>> F=D.copy() >>> D.remove(2) >>> print(D) [1, 3] >>> print(E) [1, 3] >>> print(F) [1, 2, 3]
On voit sur l’exemple précédent que E reste lié avec D. C’est un deuxième pointeur (nom) sur une même liste.
Par contre F est bien une nouvelle liste, totalement indépendante de D. On peut aussi utiliser la syntaxe D[:] au lieu de D.copy().
On peut alors facilement créer toute sorte de listes :
>>> A=[x**2 for x in range(11)] >>> A [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>> B=[2*x+3 for x in range(11)] >>> B [3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23] >>> C=[x for x in range(25) if x%3==0] >>> C [0, 3, 6, 9, 12, 15, 18, 21, 24]
Création de listes à deux dimensions
On peut la créer de façon exhaustive :
>>> A=[[1,2,3],[4,5,6]] >>> print(A) [[1, 2, 3], [4, 5, 6]]
On peut aussi utiliser les boucles :
>>> B=[[0 for j in range(10)] for i in range(3)] >>> print(B) [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Attention à l’exemple suivant :
>>> C=3*[10*[0]] >>> print(C) [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] >>> C[0][0]=8 >>> print(C) [[8, 0, 0, 0, 0, 0, 0, 0, 0, 0], [8, 0, 0, 0, 0, 0, 0, 0, 0, 0], [8, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
On voit que même si la liste C paraît correcte, les lignes sont en réalité des copies les unes des autres. Ce n’est normalement pas ce que l’on veut !
Et maintenant ?
Et bien, il est temps de les manipuler !