Les tableaux en Python - module array

01 Sep 2019 01 Sep 2019 39201 vues ESSADDOUKI Mostafa 7 min de lecture

Le module array

En programmation, un tableau est une collection d'éléments du même type. En Python, on parle généralement de listes pour désigner les tableaux. Cependant, Python fournit également le module array pour créer de vrais tableaux typés, plus proches des tableaux C/Java.

Définition — module array Le module array permet de créer des tableaux dont tous les éléments doivent être du même type numérique. Contrairement aux listes, le type est fixé à la création via un code de type et ne peut pas être mélangé.

Liste vs module array

PropriétéListe []Module array
Types d'élémentsHétérogène (int, str, float…)Homogène (un seul type numérique)
Import requis❌ Nonimport array
MémoirePlus gourmandePlus compacte (type fixe)
Flexibilité✅ Très flexible⚠️ Limitée aux types numériques
Calculs numériques⚠️ Basiques⚠️ Basiques (préférer NumPy)
Interopérabilité C❌ Non✅ Oui

Exemple n°1 — Liste hétérogène vs array typé

import array as arr

# ✅ Une liste accepte des types mixtes
liste = [10, "Hello", 10.5]
print(f"Liste OK : {liste}")

# ❌ Un array n'accepte que des valeurs du même type numérique
try:
    a = arr.array('d', [10, "Hello", 10.5])
except TypeError as e:
    print(f"TypeError : {e}")
Sortie
Liste OK : [10, 'Hello', 10.5]
TypeError : must be real number, not str

Créer un tableau


Syntaxe Python
import array as arr

a = arr.array(code_type, [val1, val2, ...])

Le code de type est un caractère qui détermine le type et la taille en mémoire de chaque élément du tableau :

CodeType PythonType C équivalentTaille (octets)Plage (signée)
'b'intsigned char1−128 … 127
'B'intunsigned char10 … 255
'h'intsigned short2−32 768 … 32 767
'H'intunsigned short20 … 65 535
'i'intsigned int2−32 768 … 32 767
'l'intsigned long4−2 147 483 648 … 2 147 483 647
'f'floatfloat4±3.4 × 1038
'd'floatdouble8±1.8 × 10308

Exemple n°2 — Création de tableaux typés

import array as arr

# Tableau d'entiers signés (code 'i')
entiers = arr.array('i', [1, 6, 7, 12])
print(f"Entiers  : {entiers}")
print(f"Type     : {entiers.typecode}")

# Tableau de flottants double précision (code 'd')
reels = arr.array('d', [3.14, 2.71, 1.41])
print(f"Réels    : {reels}")

# Tableau d'octets non signés (code 'B')
octets = arr.array('B', [0, 128, 255])
print(f"Octets   : {octets}")
Sortie
Entiers  : array('i', [1, 6, 7, 12])
Type     : i
Réels    : array('d', [3.14, 2.71, 1.41])
Octets   : array('B', [0, 128, 255])

Accès aux éléments

L'accès aux éléments d'un array fonctionne exactement comme pour les listes : indexation positive, négative et slicing.

Exemple n°3 — Indexation et slicing

import array as arr

a = arr.array('i', [10, 20, 30, 40, 50])

print(f"a[0]    = {a[0]}")    # premier élément
print(f"a[2]    = {a[2]}")    # troisième élément
print(f"a[-1]   = {a[-1]}")   # dernier élément
print(f"a[1:4]  = {a[1:4]}") # slicing
print(f"a[::2]  = {a[::2]}") # un élément sur deux
print(f"Taille  = {len(a)}")  # nombre d'éléments
Sortie
a[0]    = 10
a[2]    = 30
a[-1]   = 50
a[1:4]  = array('i', [20, 30, 40])
a[::2]  = array('i', [10, 30, 50])
Taille  = 5

Modifier un tableau

Les tableaux array sont modifiables : on peut changer, ajouter et supprimer des éléments, à condition de respecter le type déclaré.

Changer et ajouter des éléments

OpérationSyntaxeDescription
Modifiera[i] = valRemplace l'élément à l'indice i
Ajouter un élémenta.append(val)Ajoute val à la fin
Ajouter plusieursa.extend(iterable)Ajoute plusieurs éléments depuis un itérable
Insérera.insert(i, val)Insère val à la position i

Exemple n°4 — Modification et ajout

import array as arr

a = arr.array('i', [1, 6, 7, 12])
print(f"Initial        : {list(a)}")

# Modification
a[2] = 13
print(f"Après a[2]=13  : {list(a)}")

# Ajout d'un élément
a.append(23)
print(f"Après append   : {list(a)}")

# Ajout de plusieurs éléments
a.extend([13, 50, 34])
print(f"Après extend   : {list(a)}")

# Insertion à une position
a.insert(1, 99)
print(f"Après insert(1): {list(a)}")
Sortie
Initial         : [1, 6, 7, 12]
Après a[2]=13   : [1, 6, 13, 12]
Après append    : [1, 6, 13, 12, 23]
Après extend    : [1, 6, 13, 12, 23, 13, 50, 34]
Après insert(1) : [1, 99, 6, 13, 12, 23, 13, 50, 34]
Erreur — Insertion d'un mauvais type Tenter d'ajouter un élément d'un type incompatible lève une TypeError:
a = arr.array('i', [1, 2, 3])
a.append(3.14)   # ❌ TypeError: integer argument expected, got float
a.append("abc")  # ❌ TypeError: must be real number, not str

Supprimer des éléments

MéthodeDescriptionErreur si absent ?
del a[i]Supprime l'élément à l'indice iIndexError
a.remove(val)Supprime la première occurrence de valValueError
a.pop(i)Supprime et retourne l'élément à l'indice i (défaut : dernier)IndexError
del aSupprime entièrement la variable

Exemple n°5 — Suppression d'éléments

import array as arr

a = arr.array('i', [1, 6, 7, 12, 7])
print(f"Initial         : {list(a)}")

# del — par indice
del a[3]
print(f"Après del a[3]  : {list(a)}")

# remove() — par valeur (première occurrence)
a.remove(7)
print(f"Après remove(7) : {list(a)}")

# pop() — dernier élément
val = a.pop()
print(f"pop() → {val}      : {list(a)}")

# pop(i) — à un indice précis
val = a.pop(0)
print(f"pop(0) → {val}     : {list(a)}")
Sortie
Initial         : [1, 6, 7, 12, 7]
Après del a[3]  : [1, 6, 7, 7]
Après remove(7) : [1, 6, 7]
pop() → 7       : [1, 6]
pop(0) → 1      : [6]

Autres opérations utiles

Exemple n°6 — Conversion et opérations

import array as arr

a = arr.array('i', [5, 3, 8, 1, 9, 2])

# Conversion en liste
print(f"Liste    : {a.tolist()}")

# Recherche
print(f"index(8) : {a.index(8)}")     # position de 8
print(f"count(3) : {a.count(3)}")     # nb d'occurrences

# Inversion
a.reverse()
print(f"Inversé  : {a.tolist()}")

# Statistiques
print(f"Min      : {min(a)}")
print(f"Max      : {max(a)}")
print(f"Somme    : {sum(a)}")
Sortie
Liste    : [5, 3, 8, 1, 9, 2]
index(8) : 2
count(3) : 1
Inversé  : [2, 9, 1, 8, 3, 5]
Min      : 1
Max      : 9
Somme    : 28

Quand utiliser array ?

Recommandation générale Dans la plupart des cas, une liste Python est préférable à un array. Le module array est pertinent dans des situations spécifiques :
SituationRecommandation
Collection d'éléments hétérogènesListe
Calculs numériques intensifs, matricesNumPy
Grande quantité de données numériques (mémoire critique)array
Interopérabilité avec du code C / buffers binairesarray
Usage algorithmique général (CPGE, concours)Liste
Astuce — Préférer NumPy pour le calcul numérique Si vous devez effectuer des opérations mathématiques sur des tableaux (somme vectorielle, produit matriciel, statistiques…), utilisez NumPy qui est bien plus puissant et optimisé que le module array:
import numpy as np

a = np.array([1, 6, 7, 12])
print(a * 2)          # [2, 12, 14, 24] — opération vectorielle
print(a.mean())       # 6.5
print(a.std())        # écart-type

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.