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.
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éments | Hétérogène (int, str, float…) | Homogène (un seul type numérique) |
| Import requis | ❌ Non | ✅ import array |
| Mémoire | Plus gourmande | Plus 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}")Liste OK : [10, 'Hello', 10.5] TypeError : must be real number, not str
Créer un tableau
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 :
| Code | Type Python | Type C équivalent | Taille (octets) | Plage (signée) |
|---|---|---|---|---|
'b' | int | signed char | 1 | −128 … 127 |
'B' | int | unsigned char | 1 | 0 … 255 |
'h' | int | signed short | 2 | −32 768 … 32 767 |
'H' | int | unsigned short | 2 | 0 … 65 535 |
'i' | int | signed int | 2 | −32 768 … 32 767 |
'l' | int | signed long | 4 | −2 147 483 648 … 2 147 483 647 |
'f' | float | float | 4 | ±3.4 × 1038 |
'd' | float | double | 8 | ±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}")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émentsa[0] = 10
a[2] = 30
a[-1] = 50
a[1:4] = array('i', [20, 30, 40])
a[::2] = array('i', [10, 30, 50])
Taille = 5Modifier 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ération | Syntaxe | Description |
|---|---|---|
| Modifier | a[i] = val | Remplace l'élément à l'indice i |
| Ajouter un élément | a.append(val) | Ajoute val à la fin |
| Ajouter plusieurs | a.extend(iterable) | Ajoute plusieurs éléments depuis un itérable |
| Insérer | a.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)}")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]
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 strSupprimer des éléments
| Méthode | Description | Erreur si absent ? |
|---|---|---|
del a[i] | Supprime l'élément à l'indice i | ✅ IndexError |
a.remove(val) | Supprime la première occurrence de val | ✅ ValueError |
a.pop(i) | Supprime et retourne l'élément à l'indice i (défaut : dernier) | ✅ IndexError |
del a | Supprime 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)}")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)}")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 ?
array. Le module array est pertinent dans des situations spécifiques :| Situation | Recommandation |
|---|---|
| Collection d'éléments hétérogènes | ✅ Liste |
| Calculs numériques intensifs, matrices | ✅ NumPy |
| Grande quantité de données numériques (mémoire critique) | ✅ array |
| Interopérabilité avec du code C / buffers binaires | ✅ array |
| Usage algorithmique général (CPGE, concours) | ✅ Liste |
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.