Dans d'autres langages, le type qui lui ressemble le plus est le tableau. Mais en Python, l'objet liste est plus puissant car il ressemble à nos chères suites mathématiques : sa taille n'est pas limitée (sauf par la mémoire).
Les éléments d'une liste sont séparées par des virgules et entourées par les crochets.
liste = [1,2,4,8,16,32,64,128]
print(type(liste))
Pour accéder à un élément de la liste, on donne son indice comme pour nos belles suites mathématiques. Et bien sûr, on commence par 0.
liste[0]
Nous pouvons aussi lire la suite à l'envers à l'aide des indices négatifs.
liste[-1]
Nous pouvons ajouter deux listes, c'est la concaténation comme pour les chaînes de caractères (voir niveau 1).
[1,2,3]+[4,5,6]
Pour ajouter un terme à notre liste, pouvons donc faire :
liste = liste + [256]
print(liste)
Mais il y a une méthode plus rapide en utilisant les méthodes de la classe list
.
Les objets de Python sont des classes. Les classes sont des types abstraits plus sophistiqués que la notion basique de type.
En effet, une classe est livrée avec des méthodes. Ce sont des fonctions qui s'appliquent sur les objets de la classe.
Par exemple, pour la classe list
, nous avons accès à des méthodes permettant d'en connaître la taille, d'ajouter un élément, d'en retirer ou de la remplir en suivant une règle de construction.
# extrait du dernier élément d'une liste avec la méthode pop
dernier = liste.pop()
print("On a extrait l'élément ",dernier," de la liste ",liste)
# retire l'élément 32 de la liste
liste.remove(32)
print(liste)
# inverse l'ordre des éléments de la liste
liste.reverse()
print(liste)
# ajoute 32 à la fin de la liste avec la méthode append
liste.append(32)
print(liste)
# range les éléments de la liste dans l'ordre croissant
liste.sort()
print(liste)
La boucle Pour de Python n'est pas celle des premiers langages informatiques. C'est ce qui perturbe bon nombre de programmeur découvrant Python.
En effet, cette boucle sert à parcourir des listes du début jusque la fin.
La boucle Pour se présente ainsi for x in list:
et x prendra la valeur de tous les éléments de la liste les uns après les autres.
mathématiciens = ['Abel', 'Bernoulli', 'Chasles', 'Descartes', 'Euclide', 'Fibonacci']
for nom in mathématiciens:
print(nom, 'est mon ami')
Pour faire des boucles comme le faisaient les vieux langages informatiques, nous devons créer une liste d'indices.
factoriel = 1
for i in [2,3,4,5,6,7,8,9,10]:
factoriel = factoriel * i
print('10! =',factoriel)
Hélas, vous vous dites que ce sera bien long de calculer $100!$ avec cette méthode.
range en anglais signifie gamme. Avec l'objet range
, nous allons pouvoir écrire une 'gamme' de nombres rangés dans l'ordre.
L'objet range( début, fin, pas )
simule une liste de nombres entiers dans l'intervalle [ début, fin [ (début inclus, fin exclu) de pas en pas.
Python convertit seul cet objet en liste dans un Pour, mais nous pouvons le forcer à le faire dans les exemples ci-dessous.
list(range(10,100,5))
Python permet de donner des valeurs par défaut aux arguments. Par exemple, si nous ne donnons pas de valeur à pas, Python choisit alors un pas de 1.
Mais que comprend Python lorsque l'on écrit :
range(10)
Toujours la même rengaine : on commence à 0. Mais cela reste logique avec la fonction len
qui donne le nombre d'éléments d'une liste.
len(range(10))
Le bout de code calculant $10!$ devient alors :
factoriel = 1
for i in range(2,11):
factoriel = factoriel * i
print('10! =',factoriel)
Il est possible de créer rapidement une liste comme lorque l'on décrit un ensemble de nombres en compréhension.
Par exemple, pour définir l'ensemble des nombres pairs strictement plus petits que 20, nous écrivons en maths : $\{ 2n \text{ tels que } n\in\mathbb{N}, n < 10 \}$
En python, on l'écrit dans une liste : [2*n for n in range(10)]
Comment faire la liste des nombres impairs inférieurs à 100 ?