Reprenons l'exemple de notre liste de courses :
courses=['oignons','huile','sel','chips','orange']
On rappelle que cette liste peut être représenté par le schéma suivant :
Supposons qu'on veuille afficher les éléments de cette liste, il s'agit donc :
Une première façon de faire et de parcourir les indices des éléments de la liste (deuxième ligne du schéma ci-dessus), et de retrouver les éléments par leur indice. Les indices allant de 0 à 4, un range(5)
suffit. On remarque que 5
est justement la longueur de la liste et que cela permet de généraliser un parcourt par indice pour n'importe quelle taille de liste :
# Parcours de la liste par indice, affichage des éléments :
for indice in range(len(courses)):
print(courses[indice])
Détaillons le programme ci-dessus :
courses
est de longueur 5indice
prend donc les valeurs 0, 1, 2, 3 et 4 (on rappelle que la dernière valeur est exclue).course[indice]
va donc prendre successivement les valeurs course[0]
(donc "oignons"), course[1]
(donc "huile"), ...print
permet de produire l'affichage souhaitéOn peut aussi parcourir la liste directement par ses éléments, c'est à dire en créant une variable qui prendra successivement chaque élement de la liste pour valeur (on est sur la ligne des éléments sur le schéma ci-dessus). On fait toujours une boucle for
mais cette fois, il n'y a pas d'instruction range
et c'est directement le nom de la liste qui suit le in
:
### Parcours de la liste par élement, affichage de éléments :
for element in courses:
print(element)
Détaillons le programme ci-dessus :
element
prend successivement les valeurs présentes dans la listeprint
permet de produire l'affichage souhaitéfor
avec la syntaxe habituel, le range
allant de 0 à la longueur de la liste. Et on utilise la notation avec les crochets pour accéder aux élements : liste[indice]
for
est alors : for element in liste :
. La variable element
prendra alors successivement chaque valeur contenu dans la liste.
# Votre réponses ici
# Question 1
semaine = ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"]
# Question 2
for indice in range(len(semaine)):
print(semaine[indice])
print()
# Question 2
for jour in semaine:
print(jour)
Dans les exemples précédents, nous avons simplement affiché les éléments de la liste, on peut effectuer bien sur d'autres types de traitement sur les éléments de la liste. Par exemple supposons qu'on dispose d'une liste de nombres :
nombres = [12, 9, 18, 11]
On veut calculer la somme des éléments de cette liste, et on suppose que les éléments sont pris un à un successivement, c'est à dire qu'on aura d'abord la valeur 12, puis le 9, puis le 18 et ainsi de suite ... Pour effectuer ce calcul mentalement, probablement qu'on mettra en mémoire le premier nombre, puis dès qu'on aura le second on l'ajoutera à la valeur en mémoire et ainsi de suite jusqu'à la fin c'est à dire qu'on a deux phases :
somme = 0
, c'est l'initialisationsomme=0
somme = 0 + 12 = 12
somme=12
somme = 12 + 9 = 21
somme=21
somme = 21 + 18 = 39
somme=39
somme = 39 + 11 = 50
C'est ainsi que procède Python dans le programme suivant, observer bien que somme = somme + nombres[indice]
permet de remplacer l'ancienne valeur de somme
par la nouvelle
# Parcours de la liste nombres par indice et ajout dans somme
somme = 0
for indice in range(len(nombres)):
somme = somme + nombres[indice]
#Vérifions que la somme est bien calculée :
somme
Même programme mais avec un parcours par élément :
# Parcours de la liste nombres par élement et ajout dans somme
somme = 0
for nb in nombres:
somme = somme + nb
# Verifions qu'on obtient bien la même somme :
somme
# Votre réponse ici
nombres = [15, 1, 22, 10, 19, 4, 13, 17, 12, 16, 28]
# question 5
for indice in range(len(nombres)):
if nombres[indice] <= 10:
print(nombres[indice])
print()
# question 5
for nb in nombres:
if nb<= 10:
print(nb)
print()
# autre chose
liste = []
for nb in nombres:
if nb<= 10:
liste.append(nb)
print(liste)
Les chaînes de caractères sont traitées presque comme des listes par Python, on peut donc utiliser sur les chaines de caractères certaines des notations vues sur les listes et notamment la notation entre crochets pour récupérer un élément par son numéro.
a = "Python"
# a est une chaine de caractères mais la notation [] fonctionne
a[-1]
# Remarquons aussi qu'on peut effectuer un parcours par élément comme pour les listes :
for lettre in a:
print(lettre)
# Votre réponse ici
annee = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]
for mois in annee:
if mois[0] == "J":
print(mois)
Le langage Python offre plusieurs possibilités pour créer des listes.
On peut créer une liste en donnant tout simplement ces éléments :
ma_liste = [1,2,3,4,5]
ma_liste
Lorsque la liste est composée de la répétition du même élément, on peut utiliser *
de la même façons que pour les chaines de caractères :
des_zeros = [0] * 10
des_zeros
Remarquez bien que *
apparaît après avoir fermé le crochet : on écrit [0]*10
(et pas [0 * 10]
)
C'est la méthode déjà vu dans ce cours et qui consiste à partir d'une liste vide et à ajouter des éléments en fin de liste à l'aide de append
ma_liste = []
ma_liste.append(1)
ma_liste.append(2)
ma_liste.append(3)
ma_liste.append(4)
ma_liste.append(5)
ma_liste
# Votre réponse ici
nouvelle_liste = []
for i in range(1, 11):
nouvelle_liste.append(i)
nouvelle_liste
*
# Votre réponse ici
des_x = ["x"] * 26
des_x
L'instruction range()
est une fonction spéciale en Python qui génère des nombres entiers compris dans un intervalle.
Lorsqu'elle est utilisée en combinaison avec la fonction list()
, on obtient une liste d'entiers.
list(range(10))
La commande list(range(10))
a généré une liste contenant tous les nombres entiers de 0 inclus à 10 exclu.
Dans l'exemple ci-dessus, la fonction range()
a pris un argument, mais elle peut également prendre deux ou trois arguments, voyez plutôt :
list(range(0, 5))
list(range(15, 20))
list(range(0, 1000, 200))
list(range(2, -2, -1))
L'instruction range()
fonctionne sur le modèle range([début], fin, [pas])
.
Les arguments entre crochets sont optionnels.
Il faudrait, par exemple, préciser un pas de -1 pour obtenir une liste d'entiers décroissants :
list(range(10,0,-1))
On peut aussi créer une liste par compréhension, c'est à dire en indiquant à l'aide d'une boucle for
les éléments qui composent la liste (à la façon dont on définit parfois des ensembles en mathématiques)
ma_liste = [entier for entier in range(10)]
ma_liste
Cette façon de faire permet de créer rapidement par exemple la liste des 10 premiers entiers pairs en indiquant qu'ils sont les doubles des premiers entiers :
pairs = [2*entier for entier in range(10)]
pairs
Les compréhensions de tableau permettent de rajouter une condition (if) :
listes = [1, 7, 9, 15, 5, 20, 10, 8]
nombres = [p for p in listes if p > 10]
nombres
listes = [1, 7, 9, 15, 5, 20, 10, 8]
nombres = [p**2 for p in listes if p < 10]
nombres
# Votre réponse ici
carres = []
for i in range(1, 11):
carres.append(i**2)
carres
# Votre réponse ici
carres_bis = [p**2 for p in range(1, 11)]
carres_bis
# Votre réponse ici
impairs = []
for i in range(0, 50):
impairs.append(2*i+1)
impairs
# Votre réponse ici
impairs_bis = [2*p+1 for p in range(0, 50)]
impairs_bis
# Votre réponse ici
from random import randint
liste = []
for i in range(100):
liste.append( randint(1, 1000) )
liste
# En utilisant la définition par compréhention
from random import randint
liste = [randint(1, 1000) for i in range(100)]
liste
# Votre réponse ici
maximum = liste[0]
for element in liste:
if element > maximum:
maximum = element
maximum
-
afin de le faire deviner ensuite au joueur, écrire une fonction masque(mot)
qui prend en argument un mot et renvoie ce mot en remplaçant toutes ses lettres par des tirets. Par exemple masque("Python")
doit renvoyer "P----n"
# Votre réponse ici
def masque(mot):
nouveau_mot = mot[0]
for i in range(1, len(mot)-1):
nouveau_mot = nouveau_mot + "-"
nouveau_mot = nouveau_mot + mot[-1]
return nouveau_mot
masque("Python")
# Une autre version avec les listes
def masque_bis(mot):
mot = list(mot) # transforme une chaîne de caractères en listes
for i in range(1, len(mot)-1):
mot[i] = "-"
mot = "".join(mot) # transforme une listes de chaînes de caractères en une chaine de carctères
return mot
masque_bis("Python")