Algorithmique et Programmation 1
Séquences : le typelist
Licences Informatique et Mathématiques 1ère année
Premier semestre 2015 – 2016
Introduction
Savez-vous résoudre les problèmes suivants ?
I Lire n nombres, puis les afficher dans l’ordre inverse
I Lire n nombres, puis les afficher dans l’ordre croissant
I Lire n nombres différents (et vérifier qu’ils le sont)
I Stocker dans une variable les n premiers nombres premiers
I Stocker tous lesP(x)pour x variant de aàb par pas de 0,01
I Écrire une fonction qui calcule le minimumet le maximum d’une suite de nombre.
I Écrire une fonction qui calcule le temps de vol etl’altitude de la suite de Syracuse de premier termeval, etc.
Nous allons voir un nouveau type de données très important pour résoudre ce genre de problèmes : le typelist
Introduction
Savez-vous résoudre les problèmes suivants ?
I Lire n nombres, puis les afficher dans l’ordre inverse
I Lire n nombres, puis les afficher dans l’ordre croissant
I Lire n nombres différents (et vérifier qu’ils le sont)
I Stocker dans une variable les n premiers nombres premiers
I Stocker tous lesP(x)pour x variant de aàb par pas de 0,01
I Écrire une fonction qui calcule le minimumet le maximum d’une suite de nombre.
I Écrire une fonction qui calcule le temps de vol etl’altitude de la suite de Syracuse de premier termeval, etc.
Nous allons voir un nouveau type de données très important pour résoudre ce genre de problèmes : le typelist
Les listes en Python : le type list
Objectif : désigner avec une seule variable une collection de valeurs
Liste : suiteindexée(numérotée) d’objets quelconques (typelisten python)
I Élements “rangés” dans des “cases” numérotées de 0 à n−1
I En mémoire : tableau àn cases, chacune contenant une référence (“flèche”) vers une valeur
I Peut contenir des objets de plusieurs types différents
I Mutable: peut être modifiée, agrandie, raccourcie...
Création et affichage
I Création : suite entre [ et] d’expressions séparées par,
>>> lst = [3, 'toto', 4.5, False, None]
>>> print(lst)
[3, 'toto', 4.5, False, None]
I Liste vide [] : liste ne contenant aucun objet
>>> lst2 = []
>>> print(lst2) []
I Une liste peut contenir d’autres listes !
>>> lst = ['test', [1, [2], 3]]
>>> print(lst)
['test', [1, [2], 3]]
I Exemple
Accès aux éléments
I Accès à un élément donné : indexation
>>> lst = [3, 'toto', 4.5]
>>> lst[1]
'toto'
I Attention : les éléments sont indexés (numérotés) à partir de 0 L’accès à un indice supérieur ou égal au nombre d’éléments provoque une erreur
Exercice : Écrire une fonction qui affiche tous les éléments d’une liste (un par ligne)
def affiche_liste(lst): i = 0
while i < len(lst): print lst[i] i = i + 1
Accès aux éléments
I Accès à un élément donné : indexation
>>> lst = [3, 'toto', 4.5]
>>> lst[1]
'toto'
I Attention : les éléments sont indexés (numérotés) à partir de 0 L’accès à un indice supérieur ou égal au nombre d’éléments provoque une erreur
Exercice : Écrire une fonction qui affiche tous les éléments d’une liste (un par ligne)
def affiche_liste(lst):
i = 0
while i < len(lst):
print lst[i]
i = i + 1
Opérations de base
I Longueur d’une liste : fonctionlen
>>> lst = [3, 'toto', 4.5, False, None]
>>> len(lst) 5>>> len([])
0
I Concaténation
>>> [3, 'toto', 4.5] + [False, None]
[3, 'toto', 4.5, False, None]
>>> [] + [3, 'toto', 4.5] + []
[3, 'toto', 4.5]
I Répétition
>>> 3 * ['a', 'b']
['a', 'b', 'a', 'b', 'a', 'b']
>>> [0] * 13
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Test d’appartenance
Exercice : Écrire une fonction recevant une liste et une valeur, et renvoyantTruesi la valeur apparaît dans la liste (Falsesinon)
def appartient(lst, val): i = 0
while i < len(lst): if lst[i] == val:
return True i = i + 1 return False
>>> lst = ['Hildegarde', 'Cunégonde', 'Médor']
>>> appartient(lst, 'Cunégonde') True>>> if appartient(lst, 'Médor'):
. . . print('Bon chien !')
. . .
Bon chien !
Test d’appartenance
Exercice : Écrire une fonction recevant une liste et une valeur, et renvoyantTruesi la valeur apparaît dans la liste (Falsesinon)
def appartient(lst, val):
i = 0
while i < len(lst):
if lst[i] == val:
return True i = i + 1 return False
>>> lst = ['Hildegarde', 'Cunégonde', 'Médor']
>>> appartient(lst, 'Cunégonde') True>>> if appartient(lst, 'Médor'):
. . . print('Bon chien !')
. . .
Bon chien !
Test d’appartenance
Remarque : Cette fonctionnalité existe déjà en Python
I val in lstvaut True sivalapparaît danslst,Falsesinon
I Réciproquement, on peut écrire val not in lst
>>> lst = ['Hildegarde', 'Cunégonde', 'Médor']
>>> 'Cunégonde' in lst True>>> 'Rex' not in lst True>>> if 'Médor' in lst:
. . . print('Bon chien !')
. . .
Bon chien !
Modification d’un élément
I On peut modifier le i-ème élément de lstpar une affectation :
>>> lst = [3, 'toto', 4.5, False, None]
>>> lst[2]
4.5
>>> lst[2] = 'titi'
>>> lst
[3, 'toto', 'titi', False, None]
Attention, ceci ne crée pas une nouvelle liste mais modifie la liste sur place !
>>> lst = [3, 'toto', 4.5, False, None]
>>> lst_bis = lst
>>> lst[2] = 'titi'
>>> lst_bis
[3, 'toto', 'titi', False, None]
Agrandir ou rétrécir une liste
Plusieurs instructions ont un effet sur la taille de la liste :
I L’instruction lst.append(elem) ajoute l’élémentelem à la fin de la liste lst
I L’instruction lst.pop() supprime le dernier élément delstet renvoie sa valeur
I L’instructionlst.pop(i)supprime lei-ème élément de lstet renvoie sa valeur
appendetpopsont appeléesméthodes, ou fonctions s’appliquant à un objet (nous en verrons d’autres dans les cours suivants)
Attention, ces instructions ne créent pas une nouvelle liste mais modifient la liste sur place !
Attention, ne pas confondre x = lst[2]et x = lst.pop(2)!
Agrandir ou rétrécir une liste
Exemple
>>> lst = [3, 'toto', 4.5, False, None]
>>> lst_bis = lst
>>> lst.append(1)
>>> print(lst_bis)
[3, 'toto', 4.5, False, None, 1]
>>> elem = lst_bis.pop(2)
>>> print(elem) 4.5>>> print(lst)
[3, 'toto', False, None, 1]
Agrandir ou rétrécir une liste
Exercice: écrire une fonction recevant deux listes et ajoutant tous les éléments de la seconde à la fin de la première
def etend_liste(une_liste, autre_liste): i = 0
while i < len(autre_liste):
une_liste.append(autre_liste[i]) i = i + 1
I Attention, pas de return: une_listemodifiée sur place !
I Attention, une_liste.append(autre_liste.pop(0)) modifieraitautre_liste !
I Cette fonctionnalité existe déjà en Python : une_liste.extend(autre_liste)
Agrandir ou rétrécir une liste
Exercice: écrire une fonction recevant deux listes et ajoutant tous les éléments de la seconde à la fin de la première
def etend_liste(une_liste, autre_liste):
i = 0
while i < len(autre_liste):
une_liste.append(autre_liste[i]) i = i + 1
I Attention, pas de return: une_listemodifiée sur place !
I Attention, une_liste.append(autre_liste.pop(0)) modifieraitautre_liste !
I Cette fonctionnalité existe déjà en Python : une_liste.extend(autre_liste)