Accueil

Traduction

Tutoriel Python - sommaire

Tutoriel Python - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Les listes - fonction range()

La liste est le conteneur (série de données) le plus utilisé en Python.
Lorsqu'on interroge une liste avec la fonction type(), le message retourné est "class 'list'" (instance de la classe 'list').

Les listes : premiers pas

Définition d'une liste

Une liste est une suite d'élements séparés par des virgules et encadrés par des crochets.
Les différentes éléments peuvent être des entiers, des flottants, des chaines, des booléens OU un mélange de tout cela.

Une liste en Python est l'équivalent des tableaux de valeurs dans d'autres langages.

Tapez dans la console interactive (l'interpréteur) les commandes qui suivent :

La liste "maliste" comprend 4 éléments de type différent : un booléen, un entier, une chaine et un flottant.
Je vous montre ci-dessus comment accéder à un élément d'une liste : nomListe[indice]
Le premier élément d'une liste a l'indice 0 ! Donc si le nombre de termes d'une liste est n alors le dernier terme a l'indice n-1.

Je crée ensuite une liste vide nommée "liste_vide".
Pour la remplir je pourrai utiliser certaines méthodes de liste telles insert(), append(), extend() qui seront abordées plus loin.

Liste d'entiers

On utilise très souvent les listes d'entiers d'autant qu'elles peuvent être créées rapidement via la fonction range().
Commandes à saisir dans la console interactive.

a est un variable contenant une liste. En effet on lui a affecté une énumération délimitée par des crochets.
La commande type(a) retourne 'list'.
Les commandes list(a) ou print(a) ou a ont le même effet : afficher le détail de la liste.
Pour afficher le premier élément de la liste il faut écrire a[0]. On dit que le premier nombre a la position (ou indice) zéro, le deuxième l’indice 1, etc. L'indice doit être écrit entre crochets.

Peux t-on utiliser l'opérateur de comparaison "in" dans une liste d'entiers ?

Essayons !

Donc la réponse est OUI ! Une commande basée sur l'opérateur "in" retourne toujours un booléen.

La fonction range()

Le plus souvent les listes sont constituées d'entiers.
On peut construire facilement un série composée d'entiers grâce à la fonction native range()

Commandes à saisir

Attention la fonction range() toute seule crée un objet de type range (et non pas un objet de type list).
Pour créer une liste composé d'entiers, il faut imbriquer les fonctions range() & list() dans une même commande OU enchainer deux commandes comme dans l'exemple 2

La fonction range() peut avoir jusqu'a trois arguments : start, stop, step.
Ainsi pairs = range(2,20,2) donne la série des entiers positifs de 2 à 20 exclu avec un pas de 2.
Seul l'argument stop est obligatoire. Par défaut start vaut 0 et step vaut +1

Avec range() on peut créer une série avec des entiers négatifs, le pas peut être négatif.

Exemples :

Listes en compréhension

Abordons maintenant des formules un peu plus complexes : listes en compréhension.

Construire la liste des carrés des entiers naturels

La commande ci-dessus produit la liste des carrés des entiers de 0 à 9. La série produite est une liste en raison des parenthèses. J'aurais pu utiliser une autre syntaxe. Voir ci-dessous :

J'emploie la fonction générique list()

Construire la liste des premiers entiers pairs

La commande produit la liste des entiers entre 0 et 9 dont la division entière par 2 donne un reste nul.

Construire la liste des carrés des premiers entiers impairs

Les nombres impairs divisés par 2 donnent un reste non nul.

Liste de "mots"

On peut construire des listes de chaines.

Une série de commandes sur une liste de chaines

Quelques commandes pour réviser :

La liste contient des nombres écrits en lettres !

Plus loin dans le "slicing"

À saisir dans l'interpréteur :

Quand une chaine comprend une apostrophe, elle doit impérativement être délimitée par une paire de guillemets doubles (jamais des guillemets simples). Et c’est logique sinon l'interpréteur ne peut savoir où s’arrête la chaine.

Le slicing peut s'appliquer à n'importe quelle liste en particulier une liste de nombres.
Vérifions ci-dessous !

Opérations complexes sur les listes

L’addition entre des listes et la multiplication d’une liste par un entier

Exemple :

Première commande : ajout d'éléments à une nouvelle liste à partir de la liste initiale
Deuxième commande : affichage d'une liste avec le double d'éléments.
Attention, si vous écrivez seulement ma_liste2 *2 vous affichez (mais ne créez pas) une nouvelle liste à partir de liste2.
Pour créer une nouvelle liste, il faut écrire : ma_liste3 = ma_liste2*2

Des méthodes de liste

La syntaxe est la suivante : nomListe.méthode(arguments éventuels).

Quelques méthodes applicables à une liste :

Donc les deux méthodes remove() & pop() suppriment un élément de la liste ; mais avec remove() il faut passer en argument la valeur de l'élément alors qu'avec pop() il faut argumenter avec son rang (ou indice ou position). Sachant que le premier élément a le rang zéro !

Convertir une chaine en liste

Pour que chaque caractère d'une chaine devienne un élément d'un liste il faut utiliser la fonction générique list
Par contre pour que chaque mot d'une liste devienne un élément d'une liste il faut utiliser la méthode de chaine : split()

Commandes à saisir :

La fonction native list() crée une liste qui présente peu d'intérêt.
Par contre la méthode de chaine split() crée est très intéressante pour produire une liste de mots.
Il faut argumenter la méthode split() avec le caractère qui sert de séparateur de mots dans la chaine d'origine.
Par défaut le séparateur est l'espace.

Les listes de listes

Et oui, c'est possible. Et vous verrez plus tard que ça peut être très parfois utile ...

J'ai crée une liste nommée "liste_de_listes" qui comprend 3 sous-listes.
Pour afficher successivement chaque sous-liste je suis obligé de créer une boucle.

Annexe : compléments sur le type range

La fonction range() seule ne construit pas une liste mais un objet de type range.
Il est possible ensuite de convertir un objet range en liste ou tuple ou set.

Les tuples et les ensembles sont des séquences qui ont des particularités (utiles en programmation) par rapport aux listes. Ces deux types de séquences seront étudiés plus tard.

Un objet range est indexable et sliceable

Je vous montre aussi qu'on peut connaitre la taille d'un range avec la fonction len() et qu'un range est indexable est sliceable.
Le premier item a l'indice 0.

Créer des ensembles et tuples en compréhension

A partir de la fonction range() on peut créer en compréhension non seulement des listes mais aussi des ensembles et des tuples.

Il faut impérativement utiliser la fonction set() / tuple().
Notez que dans l'ensemble la moitié des éléments générés n'est pas reprise car il ne peut y avoir de doublons dans un "set".