Info-PCSI2 Mémo - Les listes en Python Nous avons vu en cours qu

publicité
Info-PCSI2
Mémo - Les listes en Python
Nous avons vu en cours qu’une liste est une collection ordonnée d’objets, pas nécessairement de
même type, qui est mutable ce qui signifie que l’on peut modifier ses éléments.
 Déclaration et affectation d’une liste
>>> L1 = [1,2,3, ’soleil’]
type
>>> L = []
# les éléments peuvent être de différents
# création d’une liste vide
On peut aussi créer des listes en compréhension :
>>>
>>>
[1,
>>>
[1,
>>>
L = range(20)
# liste des entiers de 0 à 19
[i for i in L if i%2==1]
3, 5, 7, 9, 11, 13, 15, 17, 19]
[i**2 for i in L if i%2==1]
9, 25, 49, 81, 121, 169, 225, 289, 361]
[x for x in L if x**2 > 30]
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
 Accès à un élément : On utilise la syntaxe nomdelaliste[indice]. L’indice du 1er élément est 0.
>>> L1[3]
’soleil’
>>> L1[0]
1
Mais on peut aussi compter à partir du dernier :
>>> L1[-1]
’soleil ’
>>> L1[-2]
3
Autrement dit, dans le cas où on lui donne un index négatif, Python ajoute à celui-ci le nombre
d’éléments de la liste avant d’aller chercher l’élément.
 Utilisation dans un boucle for : Une liste est un itérable aussi on peut utiliser la syntaxe :
for element in liste :
instructions
La variable element prendra successivement toutes les valeurs de la liste.
 Extraction d’une sous liste : tranchage ou slicing
On peut découper une liste en « tranches » (opération connue sous le nom de « slicing » en
anglais) : Par exemple, pour obtenir les éléments de rangs 2 à 4 de la liste précédente :
>>> L1[2:4]
[7, ’soleil’]
 Attention : ne pas oublier qu’en Python, les intervalles d’entiers sont fermés à gauche et
ouverts à droite.
On peut également remplacer une tranche d’une liste :
>>>
>>>
>>>
[1,
L1 [1,2,3, ’soleil’]
L1[1:3] = [’Bonjour ’, ’Hello ’, ’Guten Tag’, ’Buongiorno ’]
L1
’Bonjour’, ’Hello’, ’Guten Tag’, ’Buongiorno’, ’soleil’]
De manière générale, la syntaxe des tranches est L1[start:stop:step] où start désigne l’indice où
commencer, stop l’indice avant lequel il faut s’arrêter et step l’incrément à donner à l’indice à
chaque étape. On peut omettre ces valeurs start, stop, step, auquel cas python leur donne
respectivement les valeurs 0, len(L1) et 1. Ainsi L1[1::2] désigne les éléments de L1 de rang impair
et L1[::2] ceux de rang pair.
 Copier une liste
Faire le test suivant :
>>>A = [1, 6, 10, 6]
>>> B = A
>>> A[0] = 2
>>> print(A, B)
N.Véron-LMB-2013
Info-PCSI2
Que s’est-il passé ? La commande d’affectation a créé une variable B qui pointe vers la même
partie de la mémoire que A. On dit qu’on a crée un alias.
Si on veut déclarer et affecter une nouvelle liste B qui évoluera indépendamment de A il faut
créer une copie de A :
>>> A = [1, 6, 10, 6]
>>> B = A[:]
>>> A[0] = 2
>>> print(A,B)
([2, 6, 10, 6], [1, 6, 10, 6])
# On réalise une copie de A que l'on met dans B
# Seule la liste A a été modifiée
 Méthodes et opérations sur les listes :
L.append(a)
Ajoute l’élément a à la fin de la
liste L.
>>> L.append(30)
>>> L
[1, 4, 9, 16, 25, 36, 30]
L.insert(a,i)
Ajoute l’élément a, à la place
d’indice i, dans la liste L
>>> L.insert(3,40)
>>> L
[1, 4, 9, 40, 16, 25, 36, 30]
L.extend(l)
Concatène (=juxtapose) les listes
L et l.
>>> L.extend([2,3])
>>> L
[1, 4, 9, 40, 16, 25, 36, 30, 2, 3]
>>> L+[3,4]
[1, 4, 9, 40, 16, 25, 36, 30, 2, 3,
3, 4]
L.remove(a)
Enlève la première occurrence de
a dans la liste L
>>> L.remove(4)
>>> L
[1, 9, 40, 16, 25, 36, 30, 2, 3, 3,
4]
del L[i]
Supprime le terme d’indice i dans
la liste L.
>>> del L[1]
>>> L
[1, 40, 16, 25, 36, 30, 2, 3, 3, 4]
len(L)
Longueur de la liste L (càd son
nombre d’éléments)
>>> len(L)
10
a in L
Indique si a est dans la liste L ou
non.
>>> l=[4,2,'charlie',6]
>>> 'charlie' in l
True
Ou
+
Retourne un booléen
max(L)
Donne l’élément maximum d’une
liste de nombres
>>> L=[5.2,17.7,3]
>>> max(L)
17.7
L.sort()
Classe les éléments de la liste L.
>>>
>>>
>>>
[1,
L=[1,2,'bonjour',4]
L.sort()
L
2, 4, 'bonjour']
Par ailleurs, il existe de nombreuses méthodes ou
fonctions applicables aux listes auxquelles il est
facile d’accéder en tapant : nomdelaliste.
N.Véron-LMB-2013
Info-PCSI2
2. Un exercice pour appliquer les commandes de base :
A faire directement dans l’interpréteur Python
Définir la liste L = [17,38,10,25,72,47,21]
1.a. Ajouter 12 à la fin de la liste L et afficher L.
b. Enlever 38 et afficher L.
c. Afficher la sous-liste du deuxième au troisième élément.
d. Afficher la sous liste débutant à 10.
e. Afficher la sous liste de dernier élément 72.
2.a. Créer une nouvelle liste contenant tous les termes d’indices pairs de la liste.
b. Créer une nouvelle liste contenant tous les termes d’indices impairs de la liste.
3.a Utiliser une liste en compréhension pour ajouter 3 à tous les termes de la liste.
b. Utiliser une liste en compréhension pour ajouter 3 à tous les termes de la liste supérieurs à
40.
3. Des algorithmes à connaître
3.1 Parcourir les éléments d’une liste
1. Ecrire en pseudo-code un algorithme calculant la somme des éléments d’une liste de nombres.
2. Le programmer en Python et le tester sur des listes de 20 entiers entre 1 et 100 générés
aléatoirement par la machine. On pourra utiliser la commande sum pour vérifier.
3.2 Recherche du maximum
1. Ecrire en pseudo-code un algorithme de recherche du maximum dans une liste de n réels.
2. Le programmer en Python et le tester sur des listes de 20 entiers entre 1 et 100 générés
aléatoirement par la machine. On pourra utiliser la commande max pour vérifier.
3.2 To be or not to be
1. Ecrire un algorithme en pseudo-code permettant de savoir si une valeur x est dans une liste de
nombre.
La sortie de cet algorithme est vrai ou faux.
2. Le programmer en Python et le tester pour la valeur 50 sur des listes de 100 entiers entre 1
et 100 générés aléatoirement par la machine. On pourra utiliser la commande in pour vérifier.
3. Modifier votre programme pour qu’il renvoie aussi le premier indice où la valeur apparaît.
3.a. Quel est le coût de calcul de cet algorithme dans le pire des cas ?
b. La commande sort permet de trier une liste dans l’ordre croissant, améliorer votre algorithme
en commençant par trier votre liste et en modifiant votre méthode de recherche de x.
Penser au petit jeu du TP4....corrigé en page 4.
N.Véron-LMB-2013
Téléchargement