Les listes en Python
Création d’une liste
beatles = ["John", "Paul", "George", "Ringo"]
# `range` est une fonction native qui permet de créer des listes (presque) à partir de nombres
print(range(10)) # de 0 à 10 (n’inclue pas 10!)
print(range(5, 10)) # de 5 à 10 (n’inclue pas 10!)
print(range(1, 19, 3)) # de 1 à 19, par pas de 3
Connaître sa longueur (le nombre d’éléments qu’elle contient)
La fonction len
:
print( len(beatles) )
# affiche 4
Transformation d’une chaîne de caractères en liste
La fonction split
:
text = "Faire du design c’est utiliser des matériaux et des processus."
words = text.split()
print(words)
# affiche :
# ['Faire', 'du', 'design', 'c’est', 'utiliser', 'des', 'matériaux', 'et', 'des', 'processus.']
Transformer une liste en chaîne de caractères (le contraire…)
La fonction join
. Avec join
, commencer par le texte que à utiliser pour joindre les différents éléments de la liste (une espace, un caractère…):
"*".join(words)
# affiche :
# 'Faire*du*design*c’est*utiliser*des*matériaux*et*des*processus.'
Inversion d’une liste
Python possède une fonction appelée reverse
qui modifie la liste et inverse son ordre.
words = "Faire du design c’est utiliser des matériaux et des processus".split()
words.reverse()
print(words)
# affiche :
# ['processus', 'des', 'et', 'matériaux', 'des', 'utiliser', 'c’est', 'design', 'du', 'Faire']
La fonction reverse
permet de parcourir une liste dans l’ordre inverse, en laissant la liste originale inchangée.
for word in reversed(words) :
print(word)
# affiche
# processus des et matériaux des utiliser c’est design du Faire
# La liste originale reste inchangée :
print(words)
# affiche
# ['Faire', 'du', 'design', 'c’est', 'utiliser', 'des', 'matériaux', 'et', 'des', 'processus']
Voici un exemple illustrant la capacité de Python à traiter une chaîne de caractères comme une liste de lettres (et à l’inverser) :
name = "László Moholy-Nagy"
print("".join(reversed(name)))
# affiche :
# ygaN-ylohoM ólzsáL
Réduire une liste
Accéder à un seul élément
On utilise l’index (la position de l’élément dans la liste), en commençant à 0 :
print(words[1]) # L’élément à la position 1
# affiche :
# du
print(words[0]) # Le premier élément
# Faire
print(words[-1]) # Le dernier élément
# processus
Sélectionner une plage (un sous-ensemble)
En Python, le « découpage de liste » (slicing) est une pratique courante. Pour accéder à une plage d'éléments dans une liste, on peut utiliser les deux points :
. Avec cet opérateur, on peut spécifier où commencer le découpage, où le terminer, et spécifier le « pas ».
print(words[1:5]) # les mots de la position 1 (inclusif) à 5 (exclusif)
# affiche :
# ['du', 'design', 'c’est', 'utiliser']
print(words[0:6:2])
# ['Faire', 'design', 'utiliser'] # les mots de la position 0 (inclusif) à 6 (exclusif), tous les deux mots
print(words[::2])
# ['Faire', 'design', 'utiliser', 'matériaux', 'des'] # un mot sur deux
Faire quelque chose avec chaque élément
Utilisez une boucle for
:
for word in words :
print(word)
Pour connaître l’index (l’itération courante), utiliser enumerate
:
for word, index in enumerate(words) :
print(word, index)
# affiche
# 0 Faire 1 du 2 design 3 c’est 4 utiliser 5 des 6 matériaux 7 et 8 des 9 processus
Filtrer une liste
Utiliser une boucle for
et une instruction if
:
words_longs = []
for word in words :
if len(word) > 2:
words_longs.append(word)
print(words_longs)
# affiche
# ['Faire', 'design', 'c’est', 'utiliser', 'des', 'matériaux', 'des', 'processus']
Ou bien utiliser les « listes de compréhension » :
words_longs = [word for word in words if len(word) > 3]
print(words_longs)
# affiche
# ['Faire', 'design', 'c’est', 'utiliser', 'matériaux', 'processus']
Assembler deux listes
Utiliser l’opérateur « + » (ne modifie pas les listes ):
english_words = "Design is the organization of materials and processes".split()
words_and_english_words = english_words + words
print(words_and_english_words)
# affiche
# ['Design', 'is', 'the', 'organization', 'of', 'materials', 'and', 'processes', 'Faire', 'du', 'design', 'c’est', 'utiliser', 'des', 'matériaux', 'et', 'des', 'processus']
Alternativement, utiliser la fonction extend
, qui modifie une liste en y ajoutant la seconde liste.
english_words.extend(words)
print(english_words)
# affiche
# ['Design', 'is', 'the', 'organization', 'of', 'materials', 'and', 'processes', 'Faire', 'du', 'design', 'c’est', 'utiliser', 'des', 'matériaux', 'et', 'des', 'processus']
Faire une copie (de sauvegarde) d’une liste
Attention : assigner une liste à un autre nom de variable n’en crée pas une copie. On crée seulement une autre référence au même objet.
another_english_words = english_words
another_english_words.append("something")
print(another_english_words)
# affiche :
# ['Design', 'is', 'the', 'organization', 'of', 'materials', 'and', 'processes', 'something']
print(english_words)
# ['Design', 'is', 'the', 'organization', 'of', 'materials', 'and', 'processes', 'something']
Utiliser la fonction list
:
backup = list(english_words)
english_words.reverse()
print(english_words)
# affiche
# ['processes', 'and', 'materials', 'of', 'organization', 'the', 'is', 'Design']
print(backup)
# affiche
# ['Design', 'is', 'the', 'organization', 'of', 'materials', 'and', 'processes']
Cela peut être aussi fait avec le « découpage » (slicing, très pythonique ;) :
backup = english_words[:]
english_words.reverse()
print(english_words)
# affiche
# ['processes', 'and', 'materials', 'of', 'organization', 'the', 'is', 'Design']
print(backup)
# affiche
# ['Design', 'is', 'the', 'organization', 'of', 'materials', 'and', 'processes']
—
Contenu adapté de Manetta Berends – XPUB.