Cours 7

publicité
Algorithmique et Programmation 1
Séquences : le type list
Licences Informatique et Mathématiques
1ère année
Premier semestre 2015 – 2016
1 / 16
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 les P(x) pour x variant de a à b par pas de 0, 01
I
Écrire une fonction qui calcule le minimum et le maximum
d’une suite de nombre.
I
Écrire une fonction qui calcule le temps de vol et l’altitude de
la suite de Syracuse de premier terme val, etc.
2 / 16
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 les P(x) pour x variant de a à b par pas de 0, 01
I
Écrire une fonction qui calcule le minimum et le maximum
d’une suite de nombre.
I
Écrire une fonction qui calcule le temps de vol et l’altitude de
la suite de Syracuse de premier terme val, etc.
Nous allons voir un nouveau type de données très important pour
résoudre ce genre de problèmes : le type list
3 / 16
Les listes en Python : le type list
Objectif : désigner avec une seule variable une collection de valeurs
Liste : suite indexée (numérotée) d’objets quelconques
(type list en 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...
4 / 16
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
5 / 16
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)
6 / 16
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
7 / 16
Opérations de base
I
Longueur d’une liste : fonction len
>>> 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]
8 / 16
Test d’appartenance
Exercice : Écrire une fonction recevant une liste et une valeur, et
renvoyant True si la valeur apparaît dans la liste (False sinon)
9 / 16
Test d’appartenance
Exercice : Écrire une fonction recevant une liste et une valeur, et
renvoyant True si la valeur apparaît dans la liste (False sinon)
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 !
10 / 16
Test d’appartenance
Remarque : Cette fonctionnalité existe déjà en Python
I
val in lst vaut True si val apparaît dans lst, False sinon
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 !
11 / 16
Modification d’un élément
I
On peut modifier le i-ème élément de lst par 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]
12 / 16
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ément elem à la fin
de la liste lst
I
L’instruction lst.pop() supprime le dernier élément de lst et
renvoie sa valeur
I
L’instruction lst.pop(i) supprime le i-ème élément de lst et
renvoie sa valeur
append et pop sont appelées mé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) !
13 / 16
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]
14 / 16
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
15 / 16
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_liste modifiée sur place !
I
Attention, une_liste.append(autre_liste.pop(0))
modifierait autre_liste !
I
Cette fonctionnalité existe déjà en Python :
une_liste.extend(autre_liste)
16 / 16
Téléchargement