Python dispose d'un excellent type de liste intégré nommé "list". Les littéraux de liste sont écrits entre crochets [ ]. Les listes fonctionnent de la même manière que les chaînes : utilisez la fonction len() et des crochets [ ] pour accéder aux données, le premier élément ayant l'index 0. Consultez la documentation officielle de la liste python.org.
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
L'affectation avec un signe = sur des listes ne crée pas de copie. Au lieu de cela, l'affectation fait pointer les deux variables vers la même liste en mémoire.
b = colors ## Does not copy the list
La "liste vide" n'est qu'une paire de crochets vides [ ]. Le signe + permet d'ajouter deux listes. Ainsi, [1, 2] + [3, 4] donne [1, 2, 3, 4] (comme avec les chaînes).
FOR et IN
Les constructions *for* et *in* de Python sont extrêmement utiles. Nous allons les utiliser pour la première fois avec des listes. La construction *pour* -- for var in list
-- permet d'examiner facilement chaque élément d'une liste (ou d'une autre collection). N'ajoutez ni ne supprimez rien de la liste pendant l'itération.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Si vous savez quel type d'éléments figure dans la liste, utilisez un nom de variable dans la boucle qui capture ces informations, comme "num", "name" ou "url". Comme le code Python ne dispose d'aucune autre syntaxe pour vous rappeler les types, les noms de vos variables sont un moyen essentiel de vous assurer que vous comprenez ce qui se passe. (cette information est un peu trompeuse). À mesure que vous vous familiariserez avec Python, vous verrez des références à des suggestions de type qui vous permettent d'ajouter des informations de saisie à vos définitions de fonction. Python n'utilise pas ces suggestions de types lorsqu'il exécute vos programmes. Ils sont utilisés par d'autres programmes tels que les IDE (environnements de développement intégrés) et les outils d'analyse statique tels que les linters/outils de vérification de type pour valider si vos fonctions sont appelées avec des arguments compatibles.)
La construction *in* en elle-même est un moyen simple de vérifier si un élément apparaît dans une liste (ou une autre collection) (value in collection
). Elle vérifie si la valeur se trouve dans la collection et renvoie la valeur "True/False".
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
Les constructions for/in sont très couramment utilisées dans le code Python et fonctionnent sur des types de données autres que des listes. Il vous suffit donc de mémoriser leur syntaxe. Vous avez peut-être pris l'habitude d'itérer manuellement sur une collection dans d'autres langages, alors qu'en Python, vous devez simplement utiliser for/in.
Vous pouvez également utiliser for/in pour travailler sur une chaîne. La chaîne agit comme une liste de ses caractères. for ch in s: print(ch)
affiche donc tous les caractères d'une chaîne.
Plage
La fonction range(n) renvoie les nombres 0, 1, ... n-1, et range(a, b) renvoie a, a+1, ... b-1, jusqu'au dernier nombre, mais sans l'inclure. La combinaison de la boucle for et de la fonction range() vous permet de créer une boucle for numérique classique :
## print the numbers from 0 through 99 for i in range(100): print(i)
Il existe une variante xrange() qui évite le coût de la création de la liste entière pour les cas sensibles aux performances (en Python 3, range() présente un bon comportement en termes de performances et vous pouvez oublier xrange()).
Boucle "while"
Python dispose également de la boucle while standard, et les instructions *break* et *continue* fonctionnent comme en C++ et en Java, en modifiant le cours de la boucle la plus interne. Les boucles for/in ci-dessus résolvent le cas courant d'itération sur chaque élément d'une liste, mais la boucle while vous permet de contrôler totalement les numéros d'index. Voici une boucle while qui accède à chaque troisième élément d'une liste :
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
Méthodes de liste
Voici d'autres méthodes courantes de création de listes.
- list.append(elem) : ajoute un seul élément à la fin de la liste. Erreur courante : la nouvelle liste n'est pas renvoyée, mais simplement modifiée.
- list.insert(index, elem) : insère l'élément à l'index donné, en décalant les éléments vers la droite.
- list.extend(list2) ajoute les éléments de list2 à la fin de la liste. L'utilisation de + ou += sur une liste est similaire à l'utilisation d'Extend().
- list.index(elem) : recherche l'élément donné à partir du début de la liste et renvoie son indice. Génère une valeur ValueError si l'élément n'apparaît pas (utilisez "in" pour vérifier sans valeur ValueError).
- list.remove(elem) : recherche la première instance de l'élément donné et la supprime (une erreur ValueError est générée s'il n'est pas présent).
- list.sort() : trie la liste à sa place (ne la renvoie pas). (Nous vous recommandons d'utiliser la fonction sorted() présentée plus loin.)
- list.reverse() : inverse la liste sur place (ne la renvoie pas)
- list.pop(index) : supprime et renvoie l'élément à l'index donné. Renvoie l'élément le plus à droite si l'index est omis (à peu près l'opposé de "append()").
Notez qu'il s'agit de *méthodes* sur un objet liste, tandis que len() est une fonction qui utilise la liste (ou la chaîne, ou autre) comme argument.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
Erreur courante: notez que les méthodes ci-dessus ne *renvoient* pas la liste modifiée. Elles modifient simplement la liste d'origine.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
List Build Up
Un modèle courant consiste à commencer une liste par la liste vide [], puis à utiliser append() ou extend() pour y ajouter des éléments :
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Répertorier les segments d'application
Les tranches fonctionnent sur les listes comme sur les chaînes et peuvent également être utilisées pour modifier des sous-parties de la liste.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
Exercice : list1.py
Pour vous entraîner avec le contenu de cette section, essayez les problèmes de list1.py qui n'utilisent pas de tri (dans les exercices de base).