Listes Python

Python dispose d'un excellent type de liste intégré appelé "list". Les littéraux de liste sont écrits entre crochets [ ]. Le fonctionnement des listes est semblable à celui des 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

liste de chaînes 'rouge' 'bleu 'vert'

Un devoir associé à un signe = sur une liste n'en fait pas de copie. Au lieu de cela, l'affectation fait en sorte que les deux variables pointent vers la seule liste en mémoire.

  b = colors   ## Does not copy the list

les deux couleurs et le point 
b vers la liste unique

La "liste vide" n'est qu'une paire vide de crochets [ ]. Le signe "+" permet d'ajouter deux listes. Ainsi, [1, 2] + [3, 4] donne [1, 2, 3, 4] (comme pour + avec des chaînes).

POUR et IN

Les constructions *for* et *in* de Python sont extrêmement utiles. Nous allons les utiliser en premier lieu avec des listes. La construction *for* (for var in list) permet d'examiner facilement chaque élément d'une liste (ou d'une autre collection). Vous ne devez pas ajouter ni supprimer d'éléments 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ément figure dans la liste, utilisez un nom de variable dans la boucle qui capture cette information, comme "num", "name" ou "url". Comme le code Python n'a pas d'autre syntaxe pour vous rappeler les types, vos noms de variables vous permettent de savoir exactement ce qui se passe. (Ceci est un peu trompeur. À mesure que vous vous familiarisez avec Python, vous verrez des références à des suggestions de type, qui vous permettront d'ajouter des informations de saisie à vos définitions de fonction. Python n'utilise pas ces indications de type 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 lint/vérificateurs de type pour vérifier si vos fonctions sont appelées avec des arguments compatibles.

La construction *in* est, à elle seule, 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 travaillent sur des types de données autres que la liste. Il vous suffit donc de mémoriser leur syntaxe. Vous avez peut-être des habitudes provenant d'autres langages de programmation où vous commencez à itérer manuellement sur une collection, alors qu'en Python, il suffit d'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. Par conséquent, for ch in s: print(ch) affiche tous les caractères d'une chaîne.

Plage

La fonction range(n) donne les nombres 0, 1, ... n-1, et range(a, b) renvoie a, a+1, ... b-1 -- jusqu'au dernier nombre, sans l'inclure. La combinaison de la boucle For et de la fonction range() vous permet de créer une boucle For numérique traditionnelle:

  ## 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 création de la liste complète pour les cas sensibles en termes de performances (dans Python 3, range() offre de bonnes performances, et vous pouvez oublier xrange()).

Boucle "while"

Python dispose également d'une boucle "while" standard, et les instructions *break* et *continue* fonctionnent comme en C++ et Java, modifiant le cours de la boucle la plus interne. Les boucles for/in ci-dessus résolvent le cas courant d'itération de chaque élément d'une liste, mais la boucle "while" vous donne un contrôle total sur 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

Lister les méthodes

Voici d'autres méthodes de liste courantes.

  • list.append(elem) : ajoute un seul élément à la fin de la liste. Erreur courante: modifie la liste d'origine, mais ne renvoie pas la nouvelle liste.
  • list.insert(index, elem) : insère l'élément au niveau de 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 des signes + ou += sur une liste est semblable à l'utilisation d'extend().
  • list.index(elem) : recherche l'élément donné à partir du début de la liste et renvoie son index. Génère une erreur ValueError si l'élément n'apparaît pas (utilisez "in" pour effectuer une vérification sans ValueError).
  • list.remove(elem) : recherche la première instance de l'élément donné et la supprime (affiche une erreur ValueError si celle-ci n'est pas présente).
  • list.sort() -- trie la liste en place (ne la renvoie pas). Il est préférable d'utiliser la fonction publish() que vous trouverez plus loin dans cet exemple.
  • list.reverse() : inverse la liste (ne la renvoie pas).
  • list.pop(index) : supprime et renvoie l'élément correspondant à l'index donné. Renvoie l'élément le plus à droite en cas d'omission de la valeur "index" (à peu près l'opposé de la méthode "append()").

Notez qu'il s'agit de *méthodes* sur un objet de 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, mais 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]

Création de listes

L'une des méthodes les plus courantes consiste à commencer une liste en tant que liste vide [], puis à utiliser add() ou expand() 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 segments fonctionnent sur des listes comme avec des chaînes et peuvent également être utilisés 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 sur le sujet de cette section, essayez les problèmes du fichier list1.py qui n'utilisent pas le tri (dans les exercices de base).