python1Python : Les listes


Python est un langage de programmation puissant et facile à apprendre. Il dispose de structures de données de haut niveau et d’une approche de la programmation orientée objet simple mais efficace. Parce que sa syntaxe est élégante, que son typage est dynamique et qu’il est interprété, Python est un langage idéal pour l’écriture de scripts et le développement rapide d’applications dans de nombreux domaines et sur de nombreuses plateformes.

Listes

C’est une structure qui peut être très utile. Une liste peut contenir des données de types différents. Dans le cadre de ce cours, nous nous limiterons aux listes de nombres. En Python, une liste se note entre crochets avec la virgule comme séparateur.

>>> a = [9, 7, 6, 9]

La numérotation des éléments de la liste commence à 0.

>>> a = [9, 7, 6, 9]
>>> a[0]
9
>>> a[2]
6

Il peut être utile de connaitre ce que l’on appelle la longueur d’une liste.

>>> a = [9, 7, 6, 9]
>>> len(a)
4

On peut vouloir ordonner une liste de nombres dans l’ordre croissant.

>>> a = [9, 7, 6, 9]
>>> a.sort()
>>> a
[6, 7, 9, 9]

On peut vouloir ajouter un nombre à la liste, dans le sens d’agrandir la liste d’un élément.

>>> a = [9, 7, 6, 9]
>>> a.append(2)
>>> a
[9, 7, 6, 9, 2]

Puis il y a des listes toutes faites que l’on obtient grâce à la fonction range.

>>> a = range(5, 15, 2)
>>> list(a)
[5, 7, 9, 11, 13]

On a donc obtenu les entiers de 5 (inclus) à 15 (exclu) de 2 en 2 (on dit que l’incrément est 2). On peut ne pas préciser l’incrément et dans ce cas, l’incrément est 1.

>>> B = range(3, 9)
>>> list(B)
[3, 4, 5, 6, 7, 8]

On peut en plus ne pas préciser l’entier de départ. Et dans ce cas, la valeur de départ est automatiquement 0.

>>> x = range(5)
>>> list(x)
[0, 1, 2, 3, 4]

Notez finalement que la liste vide s’écrit [] et que Python fourni des outils pour manipuler les listes à volonté (voir Manipulation de listes).

Manipulation basique de listes et de texte

Manipulation de listes

>>> maliste = [0, "un", 2]  # on définit une liste pour faire des tests
>>> len(maliste)            # on demande sa longueur (length en anglais)
3
>>> maliste[0]              # on demande le premier élément (rang ou index 0)
0
>>> maliste[1]              # le deuxième (index 1)
'un'
>>> "un" in maliste         # on demande si le texte "un" est un élément de la liste
True
>>> "deux" in maliste
False
>>> maliste.index("un")     # on demande l'index (rang) de l'élément "un"
1
>>> maliste.count("un")     # on demande le nombre d'apparitions de l'élément "un"
1

Manipulation de texte

Note

Puisque Python considère qu’une chaîne est une liste de caractères, tout ce que nous venons de dire sur les listes est encore valable.

>>> montexte = "Blabla bli bloubloublou."
>>> len(montexte)
24
>>> montexte[0]
'B'
>>> montexte[1]
'l'
>>> montexte[23]
'.'
>>> "a" in montexte
True
>>> "z" in montexte
False
>>> montexte.index("B")
0
>>> montexte.index("b")
3
>>> montexte.index(".")
23
>>> montexte.count("b")
5

Certaines manipulations sont propres aux chaînes.

>>> montexte.lower()
'blabla bli bloubloublou.'
>>> montexte.strip(".")
'Blabla bli bloubloublou'
>>> montexte.split()
['Blabla', 'bli', 'bloubloublou.']
>>> montexte.lower().strip(".").split()
['blabla', 'bli', 'bloubloublou']

Ajouter du texte à du texte ou modifier par ajout

>>> montexte + " Merci."
'Blabla bli bloubloublou. Merci.'
>>> montexte
'Blabla bli bloubloublou.'
>>> montexte = montexte + " Merci."
>>> montexte
'Blabla bli bloubloublou. Merci.'
>>> montexte += " Beaucoup."
>>> montexte
'Blabla bli bloubloublou. Merci. Beaucoup.'

Manipulation avancée de listes et de texte

Prendre un élément en comptant à partir de la fin

>>> # On reprend une liste de test, un peu plus longue cette fois, et homogène.
>>> maliste = ["zéro", "un", "deux", "trois", "quatre", "cinq"]
>>> maliste[-1]     # on demande le dernier élément
'cinq'
>>> maliste[-2]     # l’avant-dernier
'quatre'
>>> maliste[-3]     # l’avant-avant-dernier (ou antépénultième), et ainsi de suite…
'trois'

Prendre une partie d’une liste

>>> maliste[1:3]    # Ici on demande une partie de la liste et non un élément seul.
['un', 'deux']
>>> # On remarque que cela fonctionne comme range(1,3), le 3 n’est pas compris.
>>> # Voyons maintenant si l’on ne précise pas l’indice de départ ou d’arrivée:
>>> maliste[1:]     # Sans indice d’arrivée, on ne s’arrête qu’à la fin,
['un', 'deux', 'trois', 'quatre', 'cinq']
>>> maliste[:3]     # sans indice de départ, on commence du tout début.
['zéro', 'un', 'deux']

Le mot le plus long

On présente ici un petit algorithme qui trouve le mot le plus long dans le texte stocké dans la variable texte.

>>> texte = "voici une suite de mots presque en vrac"
>>> mot_long = ""  # Cette variable contiendra le mot cherché.
>>> # Le recordman de longueur en quelque sorte.
... # Pour l’instant on stocke le mot vide "" dedans.
... mots = texte.split()              # On construit la liste des mots.
>>> for mot in mots:                  # On parcourt cette liste (boucle for).
...     if len(mot) > len(mot_long):  # Si le mot rencontré bat le record de longueur,
...         mot_long = mot            # on le proclame recordman.
...
>>> mot_long                          # On affiche le résultat.
'presque'

Liste des rangs d’apparition d’une lettre

>>> mot = "apparition"
>>> rangs = []                    # Cette liste va accumuler les rangs de la lettre *i*.
>>> for rang in range(len(mot)):  # La variable rang parcourt les entiers de 0 au rang de la dernière lettre du mot.
...     if mot[rang] == 'i':
...         rangs.append(rang)    # Si la lettre du mot est 'i', on stocke le rang dans notre liste.
...
>>> rangs                         # On affiche le résultat.
[5, 7]