Comment travailler avec le type de données Liste Python

Python est livré avec une collection de types de données intégrés qui facilitent les opérations courantes de gestion des données. Parmi eux se trouve la  liste , un type de collection simple mais polyvalent. Avec une liste Python, vous pouvez regrouper des objets Python dans une ligne unidimensionnelle qui permet d'accéder aux objets par position, ajoutés, supprimés, triés et subdivisés.

Principes de base de la liste Python

Définir une liste en Python est facile - utilisez simplement la syntaxe entre crochets pour indiquer les éléments d'une liste.

list_of_ints = [1, 2, 3]

Les éléments d'une liste ne doivent pas nécessairement tous être du même type. Ils peuvent être n'importe quel objet Python. (Ici, supposons que  Three c'est une fonction.)

list_of_objects = ["One", TWO, Three, {"Four": 4}, None]

Notez que le fait d'avoir des objets mixtes dans une liste peut avoir des implications sur le tri de la liste. Nous y reviendrons plus tard.

La principale raison d'utiliser une liste est de pouvoir trouver des objets par leur position dans la liste. Pour ce faire, vous utilisez la notation d'index de Python: un nombre entre parenthèses, commençant à 0, qui indique la position de l'élément dans la liste.

Pour l'exemple ci-dessus, les list_of_ints[0]rendements 1. list_of_ints[1]rendements 2. list_of_objects[4]serait l'  None objet.

Indexation de liste Python

Si vous utilisez un entier positif pour l'index, l'entier indique la position de l'élément à rechercher. Mais si vous utilisez un   entier négatif , alors l'entier indique la position à partir de la  fin  de la liste. Par exemple, l'utilisation d'un index de -1est un moyen pratique de récupérer le dernier élément d'une liste, quelle que soit la taille de la liste.

list_of_ints[-1] rendements  3list_of_objects[-1] rendements  None.

Vous pouvez également utiliser une variable entière comme index. Si  x=0list_of_ints[x] donne 1, et ainsi de suite.

Ajouter et supprimer des éléments de liste Python

Python dispose de plusieurs façons d'ajouter ou de supprimer des éléments d'une liste.

  • .append() insère un élément à la  fin  de la liste. Par exemple, list_of_ints.append(4)deviendrait  list_of_ints la liste  [1,2,3,4]. Les ajouts sont rapides et efficaces; il faut à peu près le même temps pour ajouter un élément à une liste, quelle que soit la longueur de la liste.
  • .pop() supprime et renvoie le dernier élément de la liste. Si nous exécutions  x = list_of_ints.pop() sur l'original  list_of_ints, x contiendrait la valeur  3. (Vous n'avez pas à affecter les résultats de  .pop() à une valeur, si vous n'en avez pas besoin.) Les  .pop()opérations sont également rapides et efficaces.
  • .insert() insère un élément à une position arbitraire dans la liste. Par exemple,  list_of_ints.insert(0,10) se transformerait  list_of_intsen [10,1,2,3]. Notez que plus vous vous rapprochez du début de la liste, plus cette opération sera lente, même si vous ne verrez pas beaucoup de ralentissement à moins que votre liste ne contienne plusieurs milliers d'éléments ou que vous fassiez les insertions en boucle serrée.
  • .pop(x) supprime l'élément à l'index  x. Donc  list_of_ints.pop(0) , supprimerait l'élément à l'index 0. Encore une fois, plus vous êtes proche du début de la liste, plus cette opération peut être lente.
  • .remove(item) supprime un élément d'une liste, mais  pas en  fonction de son index. Supprime plutôt .remove()la  première occurrence  de l'objet que vous spécifiez, en effectuant une recherche depuis le haut de la liste vers le bas. Car  [3,7,7,9,8].remove(7), le premier  7 serait supprimé, ce qui donnerait la liste  [3,7,9,8]. Cette opération peut également ralentir pour une grande liste, car elle doit théoriquement parcourir toute la liste pour fonctionner.

Découper une liste Python

Les listes peuvent être divisées en nouvelles listes, un processus appelé  découpage . La syntaxe de tranche de Python vous permet de spécifier la partie d'une liste à découper et comment manipuler la partie découpée.

Vous avez vu ci-dessus comment utiliser la notation entre crochets pour obtenir un seul élément d'une liste:, my_list[2]par exemple. Les tranches utilisent une variante de la même notation d'index (et en suivant les mêmes règles d'indexation): list_object[start:stop:step].

  • start est la position dans la liste pour démarrer la tranche. 
  • stop est la position dans la liste où nous arrêtons de trancher. En d'autres termes,  cette position et tout ce qui suit  est omis.
  • step est un indicateur optionnel «chaque nième élément» pour la tranche. Par défaut  1, c'est le cas, donc la tranche conserve tous les éléments de la liste à partir de laquelle elle est découpée. Réglez stepsur  2, et vous sélectionnerez chaque deuxième élément, et ainsi de suite.

Voici quelques exemples. Considérez cette liste:

slice_list = [1,2,3,4,5,6,7,8,9,0]

slice_list [0: 5] = [1, 2, 3, 4, 5]

(Notez que nous nous arrêtons à l'index 4, pas à l'index 5!)

slice_list [0: 5: 2] = [1, 3, 5]

Si vous omettez un index de tranche particulier, Python suppose une valeur par défaut. Laissez l'index de départ désactivé et Python assume le début de la liste:

slice_list [: 5] = [1, 2, 3, 4, 5]

Laissez l'index d'arrêt et Python prend la fin de la liste:

slice_list [4:] = [5, 6, 7, 8, 9, 0]

L'  step élément peut également être  négatif . Cela nous permet de prendre des tranches qui sont des copies inversées de l'original:

slice_list [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Notez que vous pouvez découper en sens inverse en utilisant des index de démarrage et d'arrêt qui vont vers l'arrière, pas vers l'avant:

slice_list [5: 2: -1] = [6, 5, 4]

Gardez également à l'esprit que les tranches de listes sont des  copies  de la liste d'origine. La liste d'origine reste inchangée. 

[Aussi sur: Les meilleurs cours gratuits de science des données pendant la quarantaine]

Trier une liste Python

Python propose deux façons de trier les listes: vous pouvez générer une nouvelle liste triée à partir de l'ancienne, ou vous pouvez trier une liste existante sur place. Ces options ont différents comportements et différents scénarios d'utilisation.

Pour créer une nouvelle liste triée, utilisez la  sorted() fonction de l'ancienne liste:

nouvelle_liste = triée (ancienne_liste)

Cela triera le contenu de la liste en utilisant les méthodes de tri par défaut de Python. Pour les chaînes, la valeur par défaut est l'ordre alphabétique; pour les nombres, ce sont des valeurs croissantes. Notez que le contenu de la liste doit être cohérent pour que cela fonctionne. Par exemple, vous ne pouvez pas trier un mélange d'entiers et de chaînes, mais vous pouvez trier une liste composée de tous les entiers ou de toutes les chaînes. Sinon, vous obtiendrez une  TypeError opération de tri.

Si vous souhaitez trier une liste à l'envers, passez le  reverse paramètre:

new_list = sorted(old_list, reverse=True)

The other way to sort, in-place sorting, performs the sort operation directly on the original list. To do this, use the list’s .sort()method:

old_list.sort()

.sort() also takes reverse as a parameter, allowing you to sort in reverse.

Both sorted() and .sort() also take a key parameter. The key parameter lets you provide a function that can be used to perform a custom sorting operation. When the list is sorted, each element is passed to the key function, and the resulting value is used for sorting. For instance, if we had a mix of integers and strings, and we wanted to sort them, we could use key like this:

mixed_list = [1,"2",3,"4", None] def sort_mixed(item): try: return int(item) except: return 0 sorted_list = sorted(mixed_list, key = sort_mixed) print (sorted_list)

Note that this code wouldn’t convert each element of the list into an integer! Rather, it would use the integer value of each item as its sort value. Also note how we use a try/except block to trap any values that don’t translate cleanly into an integer, and return 0 for them by default.

Python lists are not arrays

One important thing to know about lists in Python is that they aren’t “arrays.” Other languages, like C, have one-dimensional or multi-dimensional constructions called arrays that accept values of a single type. Lists are heterogenous; they can accept objects of any type.

What’s more, there is a separate array type in Python. The Python array is designed to emulate the behavior of an array in C, and it’s meant chiefly to allow Python to work with C arrays. The array type is useful in those cases, but in almost every pure-Python case you’ll want to use lists.

When to use Python lists (and when not to)

So when are Python lists most useful? A list is best when:

  • You need to find things quickly by their position in a collection. Accessing any position in a list takes the same amount of time, so there is no performance penalty for looking up even the millionth item in a list.
  • You’re adding and removing to the collection mainly by appending to the end or removing from the end, in the manner of a stack. Again, these operations take the same amount of time regardless of the length of the list.

A Python list is less suitable when:

  • You want to find an item in a list, but you don’t know its position. You can do this with the .index() property. For instance, you could use list_of_ints.index(1) to find the index of the first occurrence of the number 1 in list_of_ints. Speed should not be not an issue if your list is only a few items long, but for lists thousands of items long, it means Python has to search the entire list. For a scenario like this, use a dictionary, where each item can be found using a key, and where the lookup time will be the same for each value.
  • You want to add or remove items from any position but the end. Each time you do this, Python must move every other item after the added or removed item. The longer the list, the greater the performance issue this becomes. Python’s deque object is a better fit if you want to add or remove objects freely from either the start or the end of the list.

How to do more with Python

  • How to package Python apps with BeeWare Briefcase
  • How to run Anaconda side by side with other Pythons
  • How to use Python dataclasses
  • Get started with async in Python
  • How to use asyncio in Python
  • 3 steps to a Python async overhaul
  • How to use PyInstaller to create Python executables
  • Cython tutorial: How to speed up Python
  • How to install Python the smart way
  • How to manage Python projects with Poetry
  • How to manage Python projects with Pipenv
  • Virtualenv et venv: les environnements virtuels Python expliqués
  • Python Virtualenv et Venv à faire et à ne pas faire
  • Explication des threads et sous-processus Python
  • Comment utiliser le débogueur Python
  • Comment utiliser timeit pour profiler le code Python
  • Comment utiliser cProfile pour profiler le code Python
  • Comment convertir Python en JavaScript (et inversement)