Accéder au contenu principal

18 questions les plus fréquentes sur les listes Python

Découvrez comment créer une liste en Python, sélectionner des éléments, la différence entre append() et extend(), pourquoi utiliser NumPy et bien plus encore.
Actualisé 19 sept. 2026  · 15 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Cet article propose des solutions simples, des explications claires et des astuces que vous pourrez tester immédiatement grâce à des exercices interactifs !

Si vous préférez apprendre les listes dans un format cours, jetez un œil à notre cours Intro to Python for Data Science, qui comprend un chapitre sur les listes en Python.

Contexte

Les listes sont un sujet de plus en plus populaire, aussi bien pour ceux qui débutent en Python que pour les utilisateurs confirmés. Si l’on en croit les résultats de recherche de Google Trends, l’intérêt pour ce thème progresse chaque année.

Si vous fréquentez régulièrement des forums pour poser ou répondre à des questions de programmation Python, comme Stack Overflow, Quora ou Reddit, vous en connaissez sans doute la raison.

De nombreuses questions Python arrivent sur ces forums et y restent, où les utilisateurs les marquent comme « duplicata » ou « sticky », les upvotent, ou débattent ensemble de la meilleure solution.

Avec cet article, DataCamp souhaite vous aider à traiter un sujet précis : les questions les plus fréquemment posées sur les listes en Python — et de façon interactive !

Qu’est-ce qu’une liste Python, exactement ?

Les listes font partie des quatre structures de données intégrées en Python, avec les tuples, les dictionnaires et les ensembles (sets). Elles servent à stocker une collection ordonnée d’éléments, potentiellement de types différents (même si, en pratique, c’est souvent homogène). Les éléments sont séparés par des virgules et encadrés par des crochets. Comme dans cet exemple :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgVGhlc2UgbGlzdCBlbGVtZW50cyBhcmUgYWxsIG9mIHRoZSBzYW1lIHR5cGVcbnpvbyA9IFsnYmVhcicsICdsaW9uJywgJ3BhbmRhJywgJ3plYnJhJ11cbnByaW50KHpvbylcblxuIyBCdXQgdGhlc2UgbGlzdCBlbGVtZW50cyBhcmUgbm90XG5iaWdnZXJab28gPSBbJ2JlYXInLCAnbGlvbicsICdwYW5kYScsICd6ZWJyYScsIFsnY2hpbXBhbnplZXMnLCAnZ29yaWxsYXMnLCAnb3Jhbmd1dGFucycsICdnaWJib25zJ11dXG5wcmludChiaWdnZXJab28pIn0=

Vous voyez que la seconde variable biggerZoo est une liste similaire à la variable zoo. Cependant, biggerZoo contient en plus une autre liste avec différents types de singes.

Comme les listes stockent des collections ordonnées d’éléments ou d’objets, on dit que ce sont des types séquentiels, car elles se comportent comme une séquence. D’autres types considérés comme séquentiels sont les chaînes de caractères (strings) et les tuples.

Qu’ont de particulier les types séquentiels ? En bref, le programme peut itérer dessus ! C’est pour cela que les listes, chaînes, tuples et ensembles sont appelés des « itérables ».

Gardez ce concept en tête : il est fondamental et vous le retrouverez dans d’autres langages utilisés en data science, comme Scala.

Passons maintenant à la pratique ! Voici les questions sur les listes qui reviennent le plus souvent chez les programmeurs Python. Voici la liste de toutes celles auxquelles nous allons répondre dans ce tutoriel :

1. Quand utiliser des listes Python, et quand préférer des tuples, dictionnaires ou sets

À la lecture, l’introduction paraît simple. Mais lorsqu’on code un petit script Python ou un projet complet, le choix entre liste et autre type séquentiel n’est pas toujours évident.

Pourtant, choisir la bonne structure de données est essentiel.

Poursuivez la lecture pour en savoir plus.

Listes vs tuples

Les tuples servent à regrouper une liste ordonnée d’éléments immuable. Cela signifie que :

  • Vous ne pouvez pas ajouter d’éléments à un tuple. Il n’y a pas de méthodes append() ou extend() pour les tuples,
  • Vous ne pouvez pas en retirer. Pas de méthodes remove() ou pop(),
  • Vous pouvez rechercher des éléments dans un tuple, car cela ne le modifie pas.
  • Vous pouvez aussi utiliser l’opérateur in pour vérifier la présence d’un élément.

Donc, si vous définissez un ensemble de valeurs constant et que vous ne ferez que l’itérer, utilisez un tuple plutôt qu’une liste. C’est plus rapide et plus sûr, les tuples étant « protégés en écriture ».

Listes vs dictionnaires

  • Une liste stocke une collection ordonnée d’éléments. Les dictionnaires, eux, ne garantissent pas d’ordre.
  • Les dictionnaires associent chaque clé à une valeur, tandis que les listes ne contiennent que des valeurs.

Utilisez un dictionnaire quand vous avez un ensemble non ordonné de clés uniques mappées à des valeurs.

Remarque : comme clés et valeurs sont liées, les vérifications d’appartenance peuvent être plus performantes qu’avec des listes.

Listes vs sets

  • Comme les dictionnaires, les sets n’imposent pas d’ordre à leur collection. Contrairement aux listes.
  • Un set exige des éléments hachables (hashable), tandis qu’une liste peut stocker des éléments non hachables.
  • Un set contient des éléments uniques et immuables. Les doublons sont interdits, alors que les listes les autorisent et sont mutables.

Utilisez des sets lorsque vous avez un ensemble non ordonné de valeurs uniques, immuables et hachables.

Vous n’êtes pas sûr de ce qui est hachable ?

Consultez ce rappel :

Hachable Non hachable
Floats Dictionnaires
Entiers Sets
Tuples Listes
Chaînes  
frozenset()  

Astuce : ne nous croyez pas sur parole ! Testez ci-dessous et expérimentez dans un shell IPython :)

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgSW1wb3J0IHRoZSBgY29sbGVjdGlvbnNgIGxpYnJhcnlcbl9fX18gX19fX1xuXG4jIENoZWNrIGlmIGEgZGljdGlvbmFyeSBpcyBoYXNoYWJsZVxucHJpbnQoaXNpbnN0YW5jZSh7fSwgY29sbGVjdGlvbnMuSGFzaGFibGUpKVxuXG4jIENoZWNrIGlmIGEgZmxvYXQgaXMgaGFzaGFibGVcbnByaW50KGlzaW5zdGFuY2UoMC4xMjUsIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSkiLCJzb2x1dGlvbiI6IiMgSW1wb3J0IHRoZSBgY29sbGVjdGlvbnNgIGxpYnJhcnlcbmltcG9ydCBjb2xsZWN0aW9uc1xuXG4jIENoZWNrIGlmIGEgZGljdGlvbmFyeSBpcyBoYXNoYWJsZVxucHJpbnQoaXNpbnN0YW5jZSh7fSwgY29sbGVjdGlvbnMuSGFzaGFibGUpKVxuXG4jIENoZWNrIGlmIGEgZmxvYXQgaXMgaGFzaGFibGVcbnByaW50KGlzaW5zdGFuY2UoMC4xMjUsIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSkiLCJzY3QiOiJwcmVkZWZfbXNnID0gXCJEaWQgeW91IGFkZCBzb21lIGNvZGUgdG8gaW1wb3J0IGBjb2xsZWN0aW9uc2AgYW5kIHRvIHRlc3QgaWYgYSBmbG9hdCBpcyBoYXNoYWJsZT9cIlxuaW1wb3J0X21zZyA9IFwiRG9uJ3QgZm9yZ2V0IHRvIGltcG9ydCB0aGUgJ2NvbGxlY3Rpb25zJyBsaWJyYXJ5IVwiXG4jIFRlc3QgaW1wb3J0IGBjb2xsZWN0aW9uc2BcbnRlc3RfaW1wb3J0KFwiY29sbGVjdGlvbnNcIiwgc2FtZV9hcyA9IFRydWUsIG5vdF9pbXBvcnRlZF9tc2cgPSBpbXBvcnRfbXNnLCBpbmNvcnJlY3RfYXNfbXNnID0gcHJlZGVmX21zZylcbiMgVGVzdCBwcmludFxudGVzdF9mdW5jdGlvbihcbiAgICBcInByaW50XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPXByZWRlZl9tc2csXG4gICAgZG9fZXZhbD1GYWxzZVxuKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIGpvYiFcIikifQ==

Remarque : avec des éléments hachables, les tests d’appartenance (savoir si un élément est présent) sont plus rapides avec des sets qu’avec des listes.

2. Comment sélectionner un élément d’une liste

Pour bien travailler avec les listes, il faut savoir y accéder.

On accède typiquement aux listes pour modifier, mettre à jour, supprimer des valeurs, ou effectuer d’autres opérations. La façon d’accéder aux listes, et plus largement à tous les types séquentiels, est d’utiliser l’opérateur d’indexation [ ]. À l’intérieur, on met un entier.

Exemple :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiYmlnZ2VyWm9vID0gWydiZWFyJywgJ2xpb24nLCAncGFuZGEnLCAnemVicmEnLCBbJ2NoaW1wYW56ZWVzJywgJ2dvcmlsbGFzJywgJ29yYW5ndXRhbnMnLCAnZ2liYm9ucyddXSIsInNhbXBsZSI6IiMgU2VsZWN0IHRoZSBmaXJzdCBsaXN0IGVsZW1lbnRcbm9uZVpvb0FuaW1hbCA9IGJpZ2dlclpvb1swXVxuXG4jIFByaW50IGBvbmVab29BbmltYWxgXG5wcmludChfX19fKSIsInNvbHV0aW9uIjoiIyBTZWxlY3QgdGhlIGZpcnN0IGxpc3QgZWxlbWVudFxub25lWm9vQW5pbWFsID0gYmlnZ2VyWm9vWzBdXG5cbiMgUHJpbnQgYG9uZVpvb0FuaW1hbGBcbnByaW50KG9uZVpvb0FuaW1hbCkiLCJzY3QiOiJwcmVkZWZfbXNnID0gXCJEaWQgeW91IHByaW50IGBvbmVab29BbmltYWw/YFwiXG4jIFRlc3Qgb25lWm9vQW5pbWFsXG50ZXN0X29iamVjdChcIm9uZVpvb0FuaW1hbFwiLCB1bmRlZmluZWRfbXNnID0gcHJlZGVmX21zZywgaW5jb3JyZWN0X21zZyA9IHByZWRlZl9tc2cpXG4jVGVzdCBwcmludFxudGVzdF9mdW5jdGlvbihcbiAgICBcInByaW50XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPXByZWRlZl9tc2csXG4gICAgZG9fZXZhbD1GYWxzZVxuKSJ9

Exécutez et observez le résultat. Le premier élément de biggerZoo est renvoyé. Attention : les indices commencent à 0, pas à 1.

Récupérer le dernier élément d’une liste

C’est un complément à l’explication précédente.

Utilisez un indice négatif, comme -1 ou -2, pour récupérer les derniers éléments de biggerZoo !

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiYmlnZ2VyWm9vID0gWydiZWFyJywgJ2xpb24nLCAncGFuZGEnLCAnemVicmEnLCBbJ2NoaW1wYW56ZWVzJywgJ2dvcmlsbGFzJywgJ29yYW5ndXRhbnMnLCAnZ2liYm9ucyddXSIsInNhbXBsZSI6IiMgUGFzcyAtMSB0byB0aGUgaW5kZXggb3BlcmF0b3Igb24gYGJpZ2dlclpvb2Bcbm1vbmtleXMgPSBfX19cbnByaW50KG1vbmtleXMpXG5cbiMgUGFzcyAtMiB0byB0aGUgaW5kZXggb3BlcmF0b3Igb24gYGJpZ2dlclpvb2BcbnplYnJhID0gX19fXG5wcmludCh6ZWJyYSkiLCJzb2x1dGlvbiI6IiMgUGFzcyAtMSB0byB0aGUgaW5kZXggb3BlcmF0b3Igb24gYmlnZ2VyWm9vXG5tb25rZXlzID0gYmlnZ2VyWm9vWy0xXVxucHJpbnQobW9ua2V5cylcblxuIyBQYXNzIC0yIHRvIHRoZSBpbmRleCBvcGVyYXRvciBvbiBiaWdnZXJab29cbnplYnJhID0gYmlnZ2VyWm9vWy0yXVxucHJpbnQoemVicmEpIiwic2N0IjoicHJlZGVmX21zZyA9IFwiTG9vayBhdCB0aGUgcHJldmlvdXMgZXhhbXBsZSB0byBzZWUgaG93IHlvdSBjYW4gY29uc3RydWN0IHRoZSBpbmRleCBvcGVyYXRvciBvbiBgYmlnZ2VyWm9vXCJcbnplYnJhX3ByaW50X21zZyA9IFwiRGlkIHlvdSBwcmludCBgemVicmFgP1wiXG4jIFRlc3Qgb2JqZWN0c1xudGVzdF9vYmplY3QoXCJtb25rZXlzXCIsIHVuZGVmaW5lZF9tc2cgPSBwcmVkZWZfbXNnLCBpbmNvcnJlY3RfbXNnID0gcHJlZGVmX21zZylcbnRlc3Rfb2JqZWN0KFwiemVicmFcIiwgdW5kZWZpbmVkX21zZyA9IHByZWRlZl9tc2csIGluY29ycmVjdF9tc2cgPSBwcmVkZWZfbXNnKVxuI1Rlc3QgcHJpbnRcbnRlc3RfZnVuY3Rpb24oXG4gICAgXCJwcmludFwiLFxuICAgIG5vdF9jYWxsZWRfbXNnPXByZWRlZl9tc2csXG4gICAgaW5jb3JyZWN0X21zZz16ZWJyYV9wcmludF9tc2csXG4gICAgZG9fZXZhbD1GYWxzZVxuKVxuc3VjY2Vzc19tc2coXCJLZWVwIHVwIHRoZSBnb29kIHdvcmshXCIpIn0=

Pas sorcier, n’est-ce pas ?

Que signifie l’erreur « Index out of range » ?

Vous la verrez souvent, surtout quand vous débutez en programmation ou sur Python.

Le mieux pour comprendre, c’est d’essayer vous‑même.

Utilisez le widget interactif ci‑dessus et passez des indices négatifs trop petits ou positifs trop grands !

Comme vous le verrez, l’erreur « Index Out Of Range » apparaît quand vous donnez à l’opérateur d’indexation une valeur entière supérieure (ou trop inférieure) à la longueur de la liste : vous référencez une position qui n’existe pas (encore).

Voici un code qui déclenchera cette erreur. Lancez‑le pour confirmer !

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiYmlnZ2VyWm9vID0gWydiZWFyJywgJ2xpb24nLCAncGFuZGEnLCAnemVicmEnLCBbJ2NoaW1wYW56ZWVzJywgJ2dvcmlsbGFzJywgJ29yYW5ndXRhbnMnLCAnZ2liYm9ucyddXSIsInNhbXBsZSI6IiMgUnVuIHRoaXMgY29kZSB0byB0cmlnZ2VyIGFuIFwiSW5kZXggT3V0IE9mIFJhbmdlXCIgRXJyb3JcbmJpZ2dlclpvb1s2XSJ9

La notation de tranche (slice) dans les listes

Quand on débute, c’est un point parfois déroutant.

On utilise la notation de tranche pour sélectionner plusieurs éléments à la fois. Comme pour un seul élément, on utilise des crochets. Particularité : au lieu d’un entier seul, on place un : entre deux indices, par exemple :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiYmlnZ2VyWm9vID0gWydiZWFyJywgJ2xpb24nLCAncGFuZGEnLCAnemVicmEnLCBbJ2NoaW1wYW56ZWVzJywgJ2dvcmlsbGFzJywgJ29yYW5ndXRhbnMnLCAnZ2liYm9ucyddXSIsInNhbXBsZSI6IiMgVXNlIHRoZSBzbGljZSBub3RhdGlvbiBsaXN0IHRoaXNcbnNvbWVab29BbmltYWxzID0gYmlnZ2VyWm9vWzI6IF1cblxuIyBQcmludCB0byBzZWUgd2hhdCB5b3UgZXhhY3RseSBzZWxlY3QgZnJvbSBgYmlnZ2VyWm9vYFxucHJpbnQoc29tZVpvb0FuaW1hbHMpXG5cbiMgVHJ5IHB1dHRpbmcgMiBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29sb25cbm90aGVyWm9vQW5pbWFscyA9IGJpZ2dlclpvb1tfX19fXVxuXG4jIFByaW50IHRvIHNlZSB3aGF0IHlvdSdyZSBnZXR0aW5nIGJhY2tcbnByaW50KG90aGVyWm9vQW5pbWFscykiLCJzb2x1dGlvbiI6IiMgVXNlIHRoZSBzbGljZSBub3RhdGlvbiBsaXN0IHRoaXNcbnNvbWVab29BbmltYWxzID0gYmlnZ2VyWm9vWzI6IF1cblxuIyBQcmludCB0byBzZWUgd2hhdCB5b3UgZXhhY3RseSBzZWxlY3QgZnJvbSBgYmlnZ2VyWm9vYFxucHJpbnQoc29tZVpvb0FuaW1hbHMpXG5cbiMgVHJ5IHB1dHRpbmcgMiBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29sb25cbm90aGVyWm9vQW5pbWFscyA9IGJpZ2dlclpvb1s6Ml1cblxuIyBQcmludCB0byBzZWUgd2hhdCB5b3UncmUgZ2V0dGluZyBiYWNrXG5wcmludChvdGhlclpvb0FuaW1hbHMpIiwic2N0IjoicHJlZGVmX21zZyA9IFwiRGlkIHlvdSBwdXQgcGFzcyBgOjJgIHRvIHRoZSBpbmRleCBvcGVyYXRvcj9cIlxuem9vQW5pbWFsc19wcmludF9tc2cgPSBcIkRpZCB5b3UgcHJpbnQgYG90aGVyWm9vQW5pbWFsc2A/XCJcbiMgVGVzdCBsaXN0IGBsaXN0XG50ZXN0X29iamVjdChcIm90aGVyWm9vQW5pbWFsc1wiLCB1bmRlZmluZWRfbXNnPXByZWRlZl9tc2csIGluY29ycmVjdF9tc2c9cHJlZGVmX21zZylcbiMgVGVzdCBwcmludFxudGVzdF9mdW5jdGlvbihcbiAgICBcInByaW50XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPXpvb0FuaW1hbHNfcHJpbnRfbXNnLFxuICAgIGRvX2V2YWw9RmFsc2VcbilcbnN1Y2Nlc3NfbXNnKFwiWW91IHJvY2shXCIpIn0=

On obtient ici la liste biggerZoo à partir de l’entrée panda (indice 2) jusqu’à la fin. Autrement dit, on commence à 2 et on va jusqu’au bout, puisqu’aucune borne de fin n’est précisée.

Et dans l’autre sens ?

Exécutez et vérifiez !

Cette fois, on récupère seulement bear et lion. On part de l’indice 0 et on va jusqu’à 2. Contrairement à ce qu’on pourrait attendre, le résultat n’inclut pas panda.

En général :

# éléments de start jusqu'à end (end non inclus)
a[start:end]

# éléments de start jusqu'à la fin
a[start:]    

# éléments du début jusqu'à end (end non inclus)
a[:end]

Astuce : en ne passant qu’un deux-points :, vous copiez la liste !

En plus de la tranche simple, il existe la valeur de pas (step) :

# de start à end (non inclus), avec un pas donné
a[start:end:step]

À quoi sert ce pas ?

Il permet d’avancer dans la liste en ne sélectionnant que les éléments selon l’intervalle choisi. Exemple :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiYmlnZ2VyWm9vID0gWydiZWFyJywgJ2xpb24nLCAncGFuZGEnLCAnemVicmEnLCBbJ2NoaW1wYW56ZWVzJywgJ2dvcmlsbGFzJywgJ29yYW5ndXRhbnMnLCAnZ2liYm9ucyddXSIsInNhbXBsZSI6IiMgUHJpbnQgdG8gc2VlIGhvdyB0aGUgc3RlcCB2YWx1ZSBpbmZsdWVuY2VzIHlvdXIgcmVzdWx0XG5wcmludChiaWdnZXJab29bMjo6Ml0pXG5wcmludChiaWdnZXJab29bMTo6M10pIn0=

Remarque : si vous ne précisez pas de pas, il vaut 1 par défaut. Aucun élément n’est alors sauté.

À retenir : la borne de fin n’est jamais incluse dans le résultat !

Sélectionner un élément aléatoire d’une liste

Utilisez le module random :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgSW1wb3J0IGBjaG9pY2VgIGZyb20gdGhlIGByYW5kb21gIGxpYnJhcnlcbmZyb20gX19fXyBpbXBvcnQgX19fX1xuXG4jIENvbnN0cnVjdCB5b3VyIGBsaXN0YCB2YXJpYWJsZSB3aXRoIGEgbGlzdCBvZiB0aGUgZmlyc3QgNCBsZXR0ZXJzIG9mIHRoZSBhbHBoYWJldFxubGlzdCA9IFsnXycsJ18nLCdfJywnXyddXG5cbiMgUHJpbnQgeW91ciByYW5kb20gJ2xpc3QnIGVsZW1lbnRcbnByaW50KGNob2ljZShsaXN0KSkiLCJzb2x1dGlvbiI6IiMgSW1wb3J0IGBjaG9pY2VgIGZyb20gdGhlIGByYW5kb21gIGxpYnJhcnlcbmZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2VcblxuIyBDb3B5IHRoZSBncm9jZXJ5IGxpc3QgYnkgc2xpY2luZyBhbmQgc3RvcmUgaXQgaW4gdGhlIGBuZXdHcm9jZXJpZXNgIHZhcmlhYmxlXG5uZXdHcm9jZXJpZXMgPSBncm9jZXJpZXNbX19dXG5cbiMgQ29weSB0aGUgZ3JvY2VyeSBsaXN0IHdpdGggdGhlIGBsaXN0KClgIGZ1bmN0aW9uIGFuZCBzdG9yZSBpdCBpbiBhIGBncm9jZXJpZXNGb3JGcmllbmRzYCB2YXJpYWJsZVxuZ3JvY2VyaWVzRm9yRnJpZW5kcyA9IGxpc3QoX19fXylcblxuIyBJbXBvcnQgdGhlIGNvcHkgbGlicmFyeSBhcyBjXG5pbXBvcnQgX19fXyBhcyBfX1xuXG4jIENyZWF0ZSBhIGBncm9jZXJpZXNGb3JGYW1pbHlgIHZhcmlhYmxlIGFuZCBhc3NpZ24gdGhlIGNvcGllZCBncm9jZXJ5IGxpc3QgdG8gaXRcbmdyb2Nlcmllc0ZvckZhbWlseSA9ICBjLmNvcHkoX19fXylcblxuIyBVc2UgYGRlZXBjb3B5KClgIGFuZCBhc3NpZ24gdGhlIGNvcGllZCBsaXN0IHRvIGEgYGdyb2Nlcmllc0ZvcktpZHNgIHZhcmlhYmxlXG5ncm9jZXJpZXNGb3JLaWRzPSBjLmRlZXBjb3B5KF9fX18pIiwic2N0IjoicHJlZGVmX21zZyA9IFwiRGlkIHlvdSBhZGQgc29tZSBjb2RlIHRvIGNyZWF0ZSB0aGUgYGxpc3RgIHZhcmlhYmxlP1wiXG5pbXBvcnRfbXNnID0gXCJEb24ndCBmb3JnZXQgdG8gaW1wb3J0IHRoZSAncmFuZG9tJyBsaWJyYXJ5XCJcbnJhbmRvbV9saXN0X3ByaW50X21zZyA9IFwiRGlkIHlvdSBwcmludCB5b3VyIHJhbmRvbSAgbGlzdCcgZWxlbWVudD9cIlxuIyBUZXN0IGxpc3QgYGxpc3RcbnRlc3Rfb2JqZWN0KFwibGlzdFwiLCB1bmRlZmluZWRfbXNnPXByZWRlZl9tc2csIGluY29ycmVjdF9tc2c9cHJlZGVmX21zZylcbiMgVGVzdCBwcmludFxudGVzdF9mdW5jdGlvbihcbiAgICBcInByaW50XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPXJhbmRvbV9saXN0X3ByaW50X21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUgam9iIVwiKSJ9

Si vous voulez aussi sélectionner aléatoirement via les indices, utilisez randrange du module random :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgSW1wb3J0IGByYW5kcmFuZ2VgIGZyb20gdGhlIGByYW5kb21gIGxpYnJhcnlcbmZyb20gX19fXyBpbXBvcnQgX19fX1xuXG4jIENvbnN0cnVjdCB5b3VyIGByYW5kb21MZXR0ZXJzYCB2YXJpYWJsZSB3aXRoIGEgbGlzdCBvZiB0aGUgZmlyc3QgNCBsZXR0ZXJzIG9mIHRoZSBhbHBoYWJldFxucmFuZG9tTGV0dGVycyA9IFsnXycsJ18nLCAnXycsICdfJ11cblxuIyBTZWxlY3QgYSByYW5kb20gaW5kZXggZnJvbSAncmFuZG9tTGV0dGVyc2BcbnJhbmRvbUluZGV4ID0gcmFuZHJhbmdlKDAsbGVuKHJhbmRvbUxldHRlcnMpKVxuXG4jIFByaW50IHlvdXIgcmFuZG9tIGVsZW1lbnQgZnJvbSBgcmFuZG9tYFxucHJpbnQocmFuZG9tTGV0dGVyc1tyYW5kb21JbmRleF0pIiwic29sdXRpb24iOiIjIEltcG9ydCBgcmFuZHJhbmdlYCBmcm9tIHRoZSBgcmFuZG9tYCBsaWJyYXJ5XG5mcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlXG5cbiMgQ29uc3RydWN0IHlvdXIgYHJhbmRvbUxldHRlcnNgIHZhcmlhYmxlIHdpdGggYSBsaXN0IG9mIHRoZSBmaXJzdCA0IGxldHRlcnMgb2YgdGhlIGFscGhhYmV0XG5yYW5kb21MZXR0ZXJzID0gWydhJywgJ2InLCAnYycsICdkJ11cblxuIyBTZWxlY3QgYSByYW5kb20gaW5kZXggZnJvbSAncmFuZG9tTGV0dGVyc2BcbnJhbmRvbUluZGV4ID0gcmFuZHJhbmdlKDAsbGVuKHJhbmRvbUxldHRlcnMpKVxuXG4jIFByaW50IHlvdXIgcmFuZG9tIGVsZW1lbnQgZnJvbSBgcmFuZG9tYFxucHJpbnQocmFuZG9tTGV0dGVyc1tyYW5kb21JbmRleF0pIiwic2N0IjoicHJlZGVmX21zZyA9IFwiRGlkIHlvdSBhZGQgc29tZSBjb2RlIHRvIGltcG9ydCBgcmFuZG9tYCBhbmQgZGlkIHlvdSBjcmVhdGUgdGhlIGBsaXN0YCB2YXJpYWJsZT9cIlxucmFuZG9tX3ByaW50X21zZyA9IFwiRGlkIHlvdSBwcmludCB5b3VyIHJhbmRvbSBlbGVtZW50IGZyb20gYHJhbmRvbWA/XCJcbiMgVGVzdCBsaXN0IGByYW5kb21MZXR0ZXJzYFxudGVzdF9vYmplY3QoXCJyYW5kb21MZXR0ZXJzXCIsIHVuZGVmaW5lZF9tc2c9cHJlZGVmX21zZywgaW5jb3JyZWN0X21zZz1wcmVkZWZfbXNnKVxuIyBUZXN0IHByaW50XG50ZXN0X2Z1bmN0aW9uKFxuICAgIFwicHJpbnRcIixcbiAgICBub3RfY2FsbGVkX21zZz1wcmVkZWZfbXNnLFxuICAgIGluY29ycmVjdF9tc2c9cmFuZG9tX3ByaW50X21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG5zdWNjZXNzX21zZyhcIldlbGwgZG9uZSFcIikifQ==

Astuce : explorez la bibliothèque random, elle vous sera très utile en Python !

3. Comment transformer des listes Python en d’autres structures

Parfois, une liste n’est pas idéale. Dans ce cas, vous voudrez la convertir vers une structure plus adaptée. Voici les transformations les plus courantes et leurs réponses.

Convertir une liste en chaîne

Utilisez ''.join(). Cette opération « colle » toutes les chaînes de la liste pour renvoyer une seule chaîne. Plus d’infos ici.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgTGlzdCBvZiBTdHJpbmdzIHRvIGEgU3RyaW5nXG5saXN0T2ZTdHJpbmdzID0gWydPbmUnLCAnVHdvJywgJ1RocmVlJ11cbnN0ck9mU3RyaW5ncyA9ICcnLmpvaW4obGlzdE9mU3RyaW5ncylcbnByaW50KHN0ck9mU3RyaW5ncylcblxuIyBMaXN0IE9mIEludGVnZXJzIHRvIGEgU3RyaW5nXG5saXN0T2ZOdW1iZXJzID0gWzEsIDIsIDNdXG5zdHJPZk51bWJlcnMgPSAnJy5qb2luKHN0cihuKSBmb3IgbiBpbiBsaXN0T2ZOdW1iZXJzKVxucHJpbnQoc3RyT2ZOdW1iZXJzKSJ9

Remarque : si votre liste ne contient que des entiers, convertissez‑les en chaînes avant le join. C’est illustré dans le second exemple ci‑dessus.

La conversion en chaîne des entiers se fait en itérant sur la liste listOfNumbers. Pour en savoir plus sur l’itération d’une liste, voyez la question 12.

Convertir une liste en tuple

Utilisez la fonction tuple(). Passez‑lui votre liste et vous obtiendrez un tuple.

À retenir : les tuples sont immuables. Vous ne pourrez pas les modifier ensuite.

Astuce : essayez de transformer votre listOfStrings en tuple dans l’exercice interactif de la section suivante.

Convertir une liste en set

Un set est une collection non ordonnée d’éléments uniques. En convertissant une liste en set, vous perdez donc les doublons... et l’ordre d’origine.

Utilisez la fonction set() et passez‑lui votre liste.

Entraînez‑vous ici à convertir listOfStrings en tuple puis en set :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdE9mU3RyaW5ncyA9IFsnT25lJywgJ1R3bycsICdUaHJlZSddIiwic2FtcGxlIjoiIyBQYXNzIHlvdXIgbGlzdCB0byBgdHVwbGUoKWBcbnR1cGxlKF9fXylcblxuIyBUcmFuc2Zvcm0geW91ciBsaXN0IGludG8gYSBzZXRcbnNldChfX18pIiwic29sdXRpb24iOiIjIFBhc3MgeW91ciBsaXN0IHRvIGB0dXBsZSgpYFxudHVwbGUobGlzdE9mU3RyaW5ncylcblxuIyBUcmFuc2Zvcm0geW91ciBsaXN0IGludG8gYSBzZXRcbnNldChsaXN0T2ZTdHJpbmdzKSIsInNjdCI6InByZWRlZl9tc2cgPSBcIkRpZCB5b3UgcGFzcyBgbGlzdE9mU3RyaW5nc2AgdG8gYm90aCBgdHVwbGUoKWAgYW5kIGBzZXQoKWA/XCJcbiMgVGVzdCBsZW5ndGggYGp1c3RBTGlzdGBcbnRlc3RfZnVuY3Rpb24oXG4gICAgXCJ0dXBsZVwiLFxuICAgIG5vdF9jYWxsZWRfbXNnPXByZWRlZl9tc2csXG4gICAgaW5jb3JyZWN0X21zZz1wcmVkZWZfbXNnLFxuICAgIGRvX2V2YWw9RmFsc2VcbilcbnRlc3RfZnVuY3Rpb24oXG4gICAgXCJzZXRcIixcbiAgICBub3RfY2FsbGVkX21zZz1wcmVkZWZfbXNnLFxuICAgIGluY29ycmVjdF9tc2c9cHJlZGVmX21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG5zdWNjZXNzX21zZyhcIkdvb2Qgam9iIVwiKSJ9

Convertir des listes en dictionnaire

Un dictionnaire fonctionne avec des paires clé‑valeur, la conversion est donc moins directe. Supposons une liste :

helloWorld = ['hello','world','1','2']

Il faut faire interpréter « hello » et « world » puis « 1 » et « 2 » comme des paires clé‑valeur. On les sélectionne avec la notation de tranche et on les passe à zip().

zip() fait ce qu’on attend : il associe les éléments deux à deux. En zippant helloWorld[0::2] et helloWorld[1::2], vous obtenez :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiaGVsbG9Xb3JsZCA9IFsnaGVsbG8nLCd3b3JsZCcsJzEnLCcyJ10iLCJzYW1wbGUiOiJsaXN0KHppcChoZWxsb1dvcmxkKSkifQ==

Remarque : utilisez list() pour afficher le résultat de zip().

Passez ensuite ce résultat à dict(), qui interprète hello comme clé et world comme valeur. De même pour 1 et 2.

Confirmez avec le code suivant :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiaGVsbG9Xb3JsZCA9IFsnaGVsbG8nLCd3b3JsZCcsJzEnLCcyJ10iLCJzYW1wbGUiOiIjIENvbnZlcnQgdG8gYSBkaWN0aW9uYXJ5XG5oZWxsb1dvcmxkRGljdGlvbmFyeSA9IGRpY3QoemlwKGhlbGxvV29ybGRbMDo6Ml0sIGhlbGxvV29ybGRbMTo6Ml0pKVxuXG4jIFByaW50IG91dCB0aGUgcmVzdWx0XG5wcmludChoZWxsb1dvcmxkRGljdGlvbmFyeSkifQ==

Remarque : le second argument de zip() utilise un pas pour ne sélectionner que world et 2. Le premier sélectionne hello et 1.

Si votre liste est grande, vous ferez plutôt :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImEgPSBbMSwgMiwgMywgNCwgNV1cblxuIyBDcmVhdGUgYSBsaXN0IGl0ZXJhdG9yIG9iamVjdFxuaSA9IGl0ZXIoYSlcblxuIyBaaXAgYW5kIGNyZWF0ZSBhIGRpY3Rpb25hcnlcbnByaW50KGRpY3QoemlwKGksIGkpKSkifQ==

Remarque : un objet itérable peut fournir un itérateur. Cet itérateur, doté de .__next__, sait où il en est dans l’itération et quel est l’élément suivant.

4. Déterminer la taille d’une liste

Passez votre liste à la fonction len() pour obtenir sa longueur.

Testez ci‑dessous : nous avons déjà préparé une liste justAList.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoianVzdEFMaXN0ID0gWzEsMiwzLCA0LCA1LCA2LCA3LCA4LDksIDEwXSIsInNhbXBsZSI6IiMgUGFzcyBganVzdEFMaXN0YCB0byBgbGVuKClgXG5sZW4oX19fXykiLCJzb2x1dGlvbiI6IiMgUGFzcyBganVzdEFMaXN0YCB0byBgbGVuKClgXG5sZW4oanVzdEFMaXN0KSIsInNjdCI6InByZWRlZl9tc2cgPSBcIkRpZCB5b3UgcGFzcyBganVzdEFMaXN0YCB0byB0aGUgYGxlbigpYCBmdW5jdGlvbj9cIlxuIyBUZXN0IGxlbmd0aCBganVzdEFMaXN0YFxudGVzdF9mdW5jdGlvbihcbiAgICBcImxlblwiLFxuICAgIG5vdF9jYWxsZWRfbXNnPXByZWRlZl9tc2csXG4gICAgaW5jb3JyZWN0X21zZz1wcmVkZWZfbXNnLFxuICAgIGRvX2V2YWw9RmFsc2VcbilcbnN1Y2Nlc3NfbXNnKFwiVGhhdCB3YXMgZWFzeSFcIikifQ==

Remarque : len() ne s’applique pas qu’aux listes, mais aussi aux autres séquences ou collections (dictionnaires, sets, chaînes, etc.). Retrouvez d’autres fonctions intégrées ici.

5. Quelle est la différence entre append() et extend() en Python ?

Repartons de la notion d’itérable évoquée en début d’article :

À retenir : une valeur est dite itérable si votre programme peut itérer dessus. Autrement dit, un itérable représente une séquence d’une ou plusieurs valeurs. Les listes sont des séquences — donc des itérables — comme tous les types séquentiels de Python.

Astuce : vérifiez qu’une variable est itérable si elle possède la méthode .__iter__, comme ci‑dessous :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgVGhpcyBpcyB5b3VyIGxpc3Rcbmxpc3QgPSBbNSwgNiwgNywgOCwgOV1cblxuIyBDaGVjayB3aGV0aGVyIGl0J3MgaXRlcmFibGVcbmxpc3QuX19pdGVyX18ifQ==

Exécutez ce code et essayez d’autres exemples dans IPython !

Maintenant que la notion est claire, la différence devient simple : extend() prend un itérable (liste, set, tuple ou chaîne) et ajoute chacun de ses éléments à la liste, un par un.

append(), lui, ajoute son argument en un seul bloc à la fin de la liste. Donc, si vous lui passez un itérable, il sera ajouté comme un unique objet.

Étudiez les extraits suivants et expérimentez pour bien saisir la différence :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoic2hvcnRMaXN0ID0gWzEsIDIsIDNdXG5sb25nZXJMaXN0ID0gWzEsIDIsIDMsIDQsIDUsIDZdIiwic2FtcGxlIjoiIyBBcHBlbmQgWzQsNV0gdG8gYHNob3J0TGlzdGBcbnNob3J0TGlzdC5hcHBlbmQoWzQsIDVdKVxuXG4jIFVzZSB0aGUgcHJpbnQoKSBtZXRob2QgdG8gc2hvdyBzaG9ydExpc3RcbnByaW50KF9fX18pXG5cbiMgRXh0ZW5kIGBsb25nZXJMaXN0YCB3aXRoIFs0LDVdXG5sb25nZXJMaXN0LmV4dGVuZChbNCwgNV0pXG5cbiMgVXNlIHRoZSBwcmludCgpIG1ldGhvZCB0byBzZWUgbG9uZ2VyTGlzdFxucHJpbnQoX19fXykiLCJzb2x1dGlvbiI6IiMgQXBwZW5kIFs0LDVdIHRvIGBzaG9ydExpc3RgXG5zaG9ydExpc3QuYXBwZW5kKFs0LCA1XSlcblxuIyBVc2UgdGhlIGBwcmludCgpYCBtZXRob2QgdG8gc2hvdyBgc2hvcnRMaXN0YFxucHJpbnQoc2hvcnRMaXN0KVxuXG4jIEV4dGVuZCBgbG9uZ2VyTGlzdGAgd2l0aCBbNCw1XVxubG9uZ2VyTGlzdC5leHRlbmQoWzQsIDVdKVxuXG4jIFVzZSB0aGUgYHByaW50KClgIG1ldGhvZCB0byBzZWUgYGxvbmdlckxpc3RgXG5wcmludChsb25nZXJMaXN0KSIsInNjdCI6InByZWRlZl9tc2cgPSBcIkRpZCB5b3UgcGFzcyBgc2hvcnRMaXN0YCBhbmQgYGxvbmdlckxpc3RgIHRvIHRoZSBgcHJpbnQoKWAgZnVuY3Rpb24/XCJcbmxpc3RfcHJpbnRfbXNnID0gXCJEaWQgeW91IHB1dCBgc2hvcnRMaXN0YCBpbiBgcHJpbnQoKWA/XCJcbiMgVGVzdCBwcmludCBzaG9ydExpc3RcbnRlc3RfZnVuY3Rpb24oXG4gICAgXCJwcmludFwiLFxuICAgIG5vdF9jYWxsZWRfbXNnPXByZWRlZl9tc2csXG4gICAgaW5jb3JyZWN0X21zZz1saXN0X3ByaW50X21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG4jIFRlc3Q6IFByaW50IGxvbmdlckxpc3QgY29udGVudHNcbmxpc3RfcHJpbnRfbXNnMiA9IFwiRGlkIHlvdSBwdXQgYGxvbmdlckxpc3RgIGluIGBwcmludCgpYD9cIlxudGVzdF9mdW5jdGlvbihcbiAgICBcInByaW50XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPWxpc3RfcHJpbnRfbXNnMixcbiAgICBkb19ldmFsPUZhbHNlXG4pXG5zdWNjZXNzX21zZyhcImBhcHBlbmQoKWAgYW5kIGBleHRlbmQoKWAgaG9sZCBubyBzZWNyZXRzIGZvciB5b3UhXCIpIn0=

Vous voyez que extend() est plus efficace que d’appeler append() plusieurs fois.

6. Concaténer des listes en Python

Utilisez l’opérateur +. Il renvoie une nouvelle liste, concaténation des deux, sans modifier les originales.

Remarque : concaténer et « appender » peuvent prêter à confusion. append() diffère de +, qui ressemble à extend()… sans être identique. Avec append() et extend(), vous modifiez la liste d’origine, alors que + crée une nouvelle variable liste.

Testez et comparez avec les exemples précédents :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoic2hvcnRMaXN0ID0gWzEsIDIsIDNdIiwic2FtcGxlIjoiIyBDb25jYXRlbmF0ZSBgc2hvcnRMaXN0YCB3aXRoIGBbNCw1XWBcbnBsdXNMaXN0ID0gc2hvcnRMaXN0ICsgWzQsNV1cblxuI1VzZSB0aGUgYHByaW50KClgIG1ldGhvZCB0byBzZWUgYHBsdXNMaXN0YFxucHJpbnQoX19fXykiLCJzb2x1dGlvbiI6IiMgQ29uY2F0ZW5hdGUgYHNob3J0TGlzdGAgd2l0aCBgWzQsNV1gXG5wbHVzTGlzdCA9IHNob3J0TGlzdCArIFs0LDVdXG5cbiNVc2UgdGhlIGBwcmludCgpYCBtZXRob2QgdG8gc2VlIGBwbHVzTGlzdGBcbnByaW50KHBsdXNMaXN0KSIsInNjdCI6InByZWRlZl9tc2cgPSBcIkRpZCB5b3UgcGFzcyBgcGx1c0xpc3RgIHRvIHRoZSBgcHJpbnQoKWAgZnVuY3Rpb24/XCJcbnBsdXNfcHJpbnRfbXNnID0gXCJEaWQgeW91IHB1dCBgcGx1c0xpc3RgIGluIGBwcmludCgpYD9cIlxuIyBUZXN0IHByaW50IHBsdXNMaXN0XG50ZXN0X2Z1bmN0aW9uKFxuICAgIFwicHJpbnRcIixcbiAgICBub3RfY2FsbGVkX21zZz1wcmVkZWZfbXNnLFxuICAgIGluY29ycmVjdF9tc2c9cGx1c19wcmludF9tc2csXG4gICAgZG9fZXZhbD1GYWxzZVxuKVxuc3VjY2Vzc19tc2coXCJFYXN5IHBlYXN5IVwiKSJ9

7. Trier une liste en Python

Deux approches simples pour trier en ordre croissant ou décroissant :

  • La méthode sort()
  • Ou la fonction sorted() à laquelle vous passez une liste

sorted() s’applique à tout itérable : chaînes, sets, dictionnaires, etc.

Astuce : essayez vous‑même ! Nous avons déjà créé deux listes, rooms et orders, que vous pouvez trier avec les deux techniques :)

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoicm9vbXMgPSBbMzk3LCA4NywgMjk4LCA1MDMsIDQwMl1cbm9yZGVycyA9IFs3NiwgMywgNCwgNV0iLCJzYW1wbGUiOiIjIFVzZSBzb3J0KCkgb24gdGhlIHJvb21zIGxpc3Rcbl9fX18uc29ydCgpXG5cbiMgUHJpbnQgb3V0IHJvb21zIHRvIHNlZSB0aGUgcmVzdWx0XG5wcmludChfX19fKVxuXG4jIE5vdyB1c2UgdGhlIHNvcnRlZCgpIGZ1bmN0aW9uIG9uIG9yZGVyc1xuc29ydGVkKF9fX18pXG5cbiMgUHJpbnQgb3V0IG9yZGVyc1xucHJpbnQoX19fXykiLCJzb2x1dGlvbiI6IiMgVXNlIGBzb3J0KClgIG9uIHRoZSBgcm9vbXNgIGxpc3RcbnJvb21zLnNvcnQoKVxuXG4jIFByaW50IG91dCBgcm9vbXNgIHRvIHNlZSB0aGUgcmVzdWx0XG5wcmludChyb29tcylcblxuIyBOb3cgdXNlIHRoZSBgc29ydGVkKClgIGZ1bmN0aW9uIG9uIHRoZSBgb3JkZXJzYCBsaXN0XG5zb3J0ZWQob3JkZXJzKVxuXG4jIFByaW50IG91dCBvcmRlcnNcbnByaW50KG9yZGVycykiLCJzY3QiOiJwcmVkZWZfbXNnID0gXCJQdXQgaW4gYHJvb21zLnNvcnQoKWAsIHByaW50IGByb29tc2AgYW5kIHRoZW4gdXNlIGBzb3J0ZWQob3JkZXJzKWAgdG8gc29ydCB0aGUgb3JkZXJzIGFnYWluLlwiXG4jIFRlc3Qgc29ydCByb29tcyB3aXRoIHNvcnQoKVxudGVzdF9mdW5jdGlvbihcInJvb21zLnNvcnRcIiwgbm90X2NhbGxlZF9tc2c9XCJNYWtlIHN1cmUgdG8gc29ydCB0aGUgYHJvb21zYCBsaXN0LlwiKVxuIyBUZXN0OiBQcmludCBmaWxlIGNvbnRlbnRzXG5wcmludF9yb29tc19tc2cgPSBcIkRpZCB5b3UgcHV0IGByb29tc2AgaW4gYHByaW50KClgP1wiXG50ZXN0X2Z1bmN0aW9uKFxuICAgIFwicHJpbnRcIixcbiAgICBub3RfY2FsbGVkX21zZz1wcmVkZWZfbXNnLFxuICAgIGluY29ycmVjdF9tc2c9cHJpbnRfcm9vbXNfbXNnLFxuICAgIGRvX2V2YWw9RmFsc2VcbilcbnRlc3RfZnVuY3Rpb24oXCJzb3J0ZWRcIiwgbm90X2NhbGxlZF9tc2c9XCJNYWtlIHN1cmUgdG8gcGFzcyB0aGUgYG9yZGVyc2AgbGlzdCB0byBgc29ydGVkKClgLlwiKVxuc3VjY2Vzc19tc2coXCJHcmVhdCBqb2IhXCIpIn0=

Remarque : la liste originale est modifiée après tri. À privilégier quand vous n’avez plus besoin de l’ordre d’origine.

8. Cloner ou copier une liste

Plusieurs méthodes :

  • Trancher la liste et l’affecter à une nouvelle variable : newList = oldList[:]
  • Utiliser la fonction intégrée list() : newList = list(oldList)
  • Utiliser le module copy :
    • Méthode copy() : newList = copy.copy(oldList)
    • Si la liste contient des objets et que vous voulez aussi les copier, utilisez copy.deepcopy() : copy.deepcopy(oldList)

Essayez ci‑dessous : nous avons créé une liste groceries à copier et partager.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoib2JqZWN0TGlzdCA9IFsnYScsJ2InLFsnYWInLCdiYSddXVxuXG4jIENvcHkgdGhlIGBvYmplY3RMaXN0YFxuY29waWVkTGlzdCA9IG9iamVjdExpc3RbOl1cblxuIyBDaGFuZ2UgdGhlIGZpcnN0IGxpc3QgZWxlbWVudCBvZiBgY29waWVkTGlzdGBcbmNvcGllZExpc3RbMF0gPSAnYydcblxuIyBHbyB0byB0aGUgdGhpcmQgZWxlbWVudCAodGhlIG5lc3RlZCBsaXN0KSBhbmQgY2hhbmdlIHRoZSBzZWNvbmQgZWxlbWVudFxuY29waWVkTGlzdFsyXVsxXSA9ICdkJ1xuXG4jIFByaW50IG91dCB0aGUgb3JpZ2luYWwgbGlzdCB0byBzZWUgd2hhdCBoYXBwZW5lZCB0byBpdFxucHJpbnQob2JqZWN0TGlzdCkiLCJzYW1wbGUiOiIjIENvcHkgdGhlIGdyb2NlcnkgbGlzdCBieSBzbGljaW5nIGFuZCBzdG9yZSBpdCBpbiB0aGUgYG5ld0dyb2Nlcmllc2AgdmFyaWFibGVcbm5ld0dyb2NlcmllcyA9IGdyb2Nlcmllc1s6XVxuIyBDb3B5IHRoZSBncm9jZXJ5IGxpc3Qgd2l0aCB0aGUgYGxpc3QoKWAgZnVuY3Rpb24gYW5kIHN0b3JlIGl0IGluIGEgYGdyb2Nlcmllc0ZvckZyaWVuZHNgIHZhcmlhYmxlXG5ncm9jZXJpZXNGb3JGcmllbmRzID0gbGlzdChncm9jZXJpZXMpXG4jIEltcG9ydCB0aGUgY29weSBsaWJyYXJ5XG5pbXBvcnQgY29weSBhcyBjXG4jIENyZWF0ZSBhIGBncm9jZXJpZXNGb3JGYW1pbHlgIHZhcmlhYmxlIGFuZCBhc3NpZ24gdGhlIGNvcGllZCBncm9jZXJ5IGxpc3QgdG8gaXRcbmdyb2Nlcmllc0ZvckZhbWlseSA9IGMuY29weShncm9jZXJpZXMpXG4jIFVzZSBgZGVlcGNvcHkoKWAgYW5kIGFzc2lnbiB0aGUgY29waWVkIGxpc3QgdG8gYSBgZ3JvY2VyaWVzRm9yS2lkc2AgdmFyaWFibGVcbmdyb2Nlcmllc0ZvcktpZHMgPSBjLmRlZXBjb3B5KGdyb2NlcmllcykiLCJzb2x1dGlvbiI6IiMgQ29weSB0aGUgZ3JvY2VyeSBsaXN0IGJ5IHNsaWNpbmcgYW5kIHN0b3JlIGl0IGluIHRoZSBgbmV3R3JvY2VyaWVzYCB2YXJpYWJsZVxubmV3R3JvY2VyaWVzID0gZ3JvY2VyaWVzWzpdXG4jIENvcHkgdGhlIGdyb2NlcnkgbGlzdCB3aXRoIHRoZSBgbGlzdCgpYCBmdW5jdGlvbiBhbmQgc3RvcmUgaXQgaW4gYSBgZ3JvY2VyaWVzRm9yRnJpZW5kc2AgdmFyaWFibGVcbmdyb2Nlcmllc0ZvckZyaWVuZHMgPSBsaXN0KGdyb2NlcmllcylcbiMgSW1wb3J0IHRoZSBjb3B5IGxpYnJhcnlcbmltcG9ydCBjb3B5IGFzIGNcbiMgQ3JlYXRlIGEgYGdyb2Nlcmllc0ZvckZhbWlseWAgdmFyaWFibGUgYW5kIGFzc2lnbiB0aGUgY29waWVkIGdyb2NlcnkgbGlzdCB0byBpdFxuZ3JvY2VyaWVzRm9yRmFtaWx5ID0gYy5jb3B5KGdyb2NlcmllcylcbiMgVXNlIGBkZWVwY29weSgpYCBhbmQgYXNzaWduIHRoZSBjb3BpZWQgbGlzdCB0byBhIGBncm9jZXJpZXNGb3JLaWRzYCB2YXJpYWJsZVxuZ3JvY2VyaWVzRm9yS2lkcyA9IGMuZGVlcGNvcHkoZ3JvY2VyaWVzKSIsInNjdCI6InByZWRlZl9tc2cgPSBcIkRvbid0IGZvcmdldCB0byBhZGQgc29tZSBjb2RlIHRvIHRoZSBleGVyY2lzZSFcIlxuIyBUZXN0IGNvcHkgb2YgZ3JvY2VyeSBsaXN0IHdpdGggc2xpY2luZ1xudGVzdF9vYmplY3QoXCJuZXdHcm9jZXJpZXNcIiwgdW5kZWZpbmVkX21zZyA9IHByZWRlZl9tc2csIGluY29ycmVjdF9tc2cgPSBwcmVkZWZfbXNnKVxuXG4jIFRlc3QgY29weSBvZiBncm9jZXJ5IGxpc3Qgd2l0aCBgbGlzdCgpYFxudGVzdF9vYmplY3QoXCJncm9jZXJpZXNGb3JGcmllbmRzXCIsIHVuZGVmaW5lZF9tc2cgPSBwcmVkZWZfbXNnLCBpbmNvcnJlY3RfbXNnID0gcHJlZGVmX21zZylcbnRlc3RfZnVuY3Rpb24oXCJsaXN0XCIsIG5vdF9jYWxsZWRfbXNnPVwiTWFrZSBzdXJlIHRvIHBhc3MgdGhlIGdyb2NlcmllcyBsaXN0IHRvIGBsaXN0KClgLlwiKVxuXG4jIEltcG9ydCBjb3B5IGxpYnJhcnlcbnRlc3RfaW1wb3J0KFwiY29weVwiLCBzYW1lX2FzID0gVHJ1ZSwgbm90X2ltcG9ydGVkX21zZyA9IHByZWRlZl9tc2csIGluY29ycmVjdF9hc19tc2cgPSBwcmVkZWZfbXNnKVxuXG4jIFRlc3QgY29weS5jb3B5KClcbnRlc3Rfb2JqZWN0KFwiZ3JvY2VyaWVzRm9yRmFtaWx5XCIsIHVuZGVmaW5lZF9tc2cgPSBwcmVkZWZfbXNnLCBpbmNvcnJlY3RfbXNnID0gcHJlZGVmX21zZylcbmNvcHlfY29weV9tc2cgPSBcIkRpZCB5b3UgcGFzcyB0aGUgZ3JvY2VyeSBsaXN0IHRvIGBjb3B5LmNvcHkoKWAgP1wiXG50ZXN0X2Z1bmN0aW9uKFxuICAgIFwiY29weS5jb3B5XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPWNvcHlfY29weV9tc2csXG4gICAgZG9fZXZhbD1GYWxzZVxuKVxuXG4jIFRlc3QgY29weS5kZWVwY29weSgpXG50ZXN0X29iamVjdChcImdyb2Nlcmllc0ZvcktpZHNcIiwgdW5kZWZpbmVkX21zZyA9IHByZWRlZl9tc2csIGluY29ycmVjdF9tc2cgPSBwcmVkZWZfbXNnKVxuY29weV9kZWVwY29weV9tc2cgPSBcIkRpZCB5b3UgcGFzcyB0aGUgZ3JvY2VyeSBsaXN0IHRvIGBjb3B5LmRlZXBjb3B5KClgP1wiXG50ZXN0X2Z1bmN0aW9uKFxuICAgIFwiY29weS5kZWVwY29weVwiLFxuICAgIG5vdF9jYWxsZWRfbXNnPXByZWRlZl9tc2csXG4gICAgaW5jb3JyZWN0X21zZz1jb3B5X2RlZXBjb3B5X21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG5cbnN1Y2Nlc3NfbXNnKFwiVGhhdCB3YXMgYSBsb3Qgb2Ygd29yayEgQXdlc29tZSA6KVwiKSJ9

Remarque : avec les copies « simples », les sous‑listes pointées par plusieurs listes restent partagées. deepcopy() évite cela. Exécutez :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgVGhpcyBpcyB5b3VyIGxpc3Rcbm9iamVjdExpc3QgPSBbJ2EnLCdiJyxbJ2FiJywnYmEnXV1cblxuIyBDb3B5IHRoZSBgb2JqZWN0TGlzdGBcbmNvcGllZExpc3QgPSBvYmplY3RMaXN0WzpdXG5cbiMgQ2hhbmdlIHRoZSBmaXJzdCBsaXN0IGVsZW1lbnQgb2YgYGNvcGllZExpc3RgXG5jb3BpZWRMaXN0WzBdID0gJ2MnXG5cbiMgR28gdG8gdGhlIHRoaXJkIGVsZW1lbnQgKHRoZSBuZXN0ZWQgbGlzdCkgYW5kIGNoYW5nZSB0aGUgc2Vjb25kIGVsZW1lbnRcbmNvcGllZExpc3RbMl1bMV0gPSAnZCdcblxuIyBQcmludCBvdXQgdGhlIG9yaWdpbmFsIGxpc3QgdG8gc2VlIHdoYXQgaGFwcGVuZWQgdG8gaXRcbnByaW50KG9iamVjdExpc3QpIn0=

Si vous maîtrisez déjà bien les listes, la section suivante apporte des réponses simples à des questions plus avancées.

Et si vous vous demandez ce qu’il y a au‑delà des listes, et quels avantages des bibliothèques peuvent apporter par rapport aux listes natives, la prochaine section va vous intéresser.

Continuez la lecture !

9. Comment fonctionnent les compréhensions de listes en Python ?

En bref, c’est une façon élégante de construire des listes. Bonne nouvelle pour les matheux : la syntaxe rappelle les notations mathématiques. Jugez plutôt :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6Ilt4KioyIGZvciB4IGluIHJhbmdlKDEwKV0ifQ==

Ici, on prend les nombres de 0 à 9 (10 exclu) et on les multiplie tous par 2. Exécutez pour vérifier le résultat.

Pas compliqué. Montons d’un cran !

Faisons la même liste, mais seulement pour les nombres divisibles par 2. Facile avec une compréhension conditionnelle :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6Ilt4KioyIGZvciB4IGluIHJhbmdlKDEwKSBpZiB4JTI9PTBdIn0=

On ajoute une condition if. Si elle est vraie, le nombre est multiplié par 2. Ici, la condition est « divisible par 2 sans reste ».

De façon plus générale, vous pouvez transformer vos listes en d’autres listes — ce qui peut sembler plus abstrait.

Exemple :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6Im15TGlzdCA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF1cblsobGFtYmRhIHg6IHgqeCkoeCkgZm9yIHggaW4gbXlMaXN0XSJ9

Ici, vous avez déjà une liste myList que vous transformez par compréhension : pour chaque élément x de myList, on applique une opération.

Vous voyez (lambda x: x*x). Pour faire simple : une fonction lambda est une fonction anonyme, définie à l’exécution. Retenez surtout x*x.

La fonction prend un élément et le multiplie par lui‑même. Étant anonyme, on lui passe l’argument explicitement : d’où (lambda x: x*x)(x).

Autrement, on pourrait écrire :

f = lambda x: x*x
[f(x) for x in range(10)]

On définit d’abord la fonction lambda (carré de x), puis on l’applique à chaque élément.

Remarque : il existe aussi des compréhensions d’ensembles (set) et de dictionnaires.

C’est déjà pas mal, mais il y a encore beaucoup à explorer sur les compréhensions.

Continuez avec les questions suivantes pour en savoir plus sur les compréhensions imbriquées et des exemples pratiques.

10. Compter les occurrences d’un élément dans une liste

Les listes n’imposant pas l’unicité, vous voudrez parfois compter combien de fois un élément donné apparaît, voire le nombre d’occurrences de chaque élément.

Voici les deux cas :

Compter les occurrences d’un seul élément

Utilisez la méthode count() :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgQ291bnQgdGhlIG9jY3VycmVuY2VzIG9mIHRoZSBudW1iZXIgNFxucHJpbnQoWzEsIDIsIDksIDQsIDUsIDQsIDFdLmNvdW50KDQpKVxuXG4jIENvdW50IHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgbGV0dGVyIFwiYVwiXG5saXN0ID0gW1wiZFwiLCBcImFcIiwgXCJ0XCIsIFwiYVwiLCBcImNcIiwgXCJhXCIsIFwibVwiLCBcInBcIl1cbmxpc3QuY291bnQoXCJhXCIpIn0=

Compter toutes les occurrences de tous les éléments est aussi appelé « faire le tally » d’une liste (compteur global).

Compter toutes les occurrences avec count()

Combinez compréhension de liste et count() :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6Imxpc3Q9IFtcImFcIixcImJcIixcImJcIl1cbltbeCxsaXN0LmNvdW50KHgpXSBmb3IgeCBpbiBzZXQobGlzdCldIn0=

Ici, on convertit d’abord la liste en set pour ne garder que les éléments uniques (a et b), puis on compte pour chacun le nombre d’occurrences dans la liste d’origine.

À retenir : un set ne contient que des éléments uniques.

Compter tous les éléments avec Counter()

Alternative plus rapide : Counter() de la bibliothèque collections :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgSW1wb3J0IGBDb3VudGVyYCBmcm9tIHRoZSBgY29sbGVjdGlvbnNgIGxpYnJhcnlcbmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcblxuIyBUaGlzIGlzIHlvdXIgbGlzdFxubGlzdCA9IFtcImFcIixcImJcIixcImJcIl1cblxuIyBQYXNzIGBsaXN0YCB0byBgQ291bnRlcigpYFxuQ291bnRlcihsaXN0KSJ9

Remarque : Counter() est généralement plus rapide pour compter tous les éléments.

11. Découper une liste en blocs de taille égale

Pour découper une liste en parties de même taille, combinez zip() et iter() :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgWW91ciBsaXN0IGB4YFxueCA9IFsxLDIsMyw0LDUsNiw3LDgsOV1cblxuIyBTcGxpdCBgeGAgdXAgaW4gY2h1bmtzIG9mIDNcbnkgPSB6aXAoKltpdGVyKHgpXSozKVxuXG4jIFVzZSBgbGlzdCgpYCB0byBwcmludCB0aGUgcmVzdWx0IG9mIGB6aXAoKWBcbmxpc3QoeSkifQ==

Explications :

  • iter() renvoie un itérateur sur une séquence.
  • [iter(x)] * 3 produit une liste de trois itérateurs sur x.
  • Le * devant zip() « dépaquette » la séquence en arguments, ce qui passe le même itérateur trois fois à zip(), qui tire un élément à chaque fois.

Pas clair ? Déroulons :

  1. Vous avez trois itérateurs, que l’on peut voir comme :

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


  1. Au premier passage, zip() prend un élément séquentiellement, ce qui donne :

[1][2][3]


Remarque : les itérateurs retiennent la position courante.

  1. Au second passage, on ajoute :

[1, 4], [2, 5], [3, 6]


  1. Au dernier, même logique :

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


  1. En zippant ces trois listes, on obtient :

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

Pour encapsuler cette logique dans une fonction :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibyBNZXRob2QgdG8gc3BsaXQgdXAgeW91ciBsaXN0cyBpbnRvIGNodW5rc1xuZGVmIGNodW5rcyhsaXN0LCBjaHVua1NpemUpOlxuICAgIFwiXCJcIllpZWxkIHN1Y2Nlc3NpdmUgY2h1bmtTaXplLXNpemVkIGNodW5rcyBmcm9tIGxpc3QuXCJcIlwiXG4gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGxpc3QpLCBjaHVua1NpemUpOlxuICAgICAgICB5aWVsZCBsaXN0W2k6aSArIGNodW5rU2l6ZV1cblxuIyBVc2UgeW91ciBgY2h1bmtzYCBmdW5jdGlvbiB0byBwcmludCBvdXQgY2h1bmtzIG9mIHRoZSBzYW1lIHNpemVcbmltcG9ydCBwcHJpbnRcbnBwcmludC5wcmludChsaXN0KGNodW5rcyhyYW5nZSgxMCwgNzUpLCAxMCkpKSJ9

Votre fonction chunks() reçoit une liste et une taille de bloc, puis « yield » des tranches successives de cette taille.

La boucle range(0, len(list), chunkSize) part de 0 jusqu’à la longueur de la liste, avec un pas égal à chunkSize.

Pour chaque valeur, vous « yieldez » la tranche [i:i+chunkSize].

Exemple : à l’indice 0, vous donnez [0:2]. À l’itération suivante (pas oblige), l’indice 2 produit [2:4].

Remarque : on utilise pprint() pour un affichage lisible.

Vous pouvez aussi utiliser une compréhension de liste plutôt qu’une fonction :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgU2V0IHVwIHlvdXIgbGlzdCBhbmQgY2h1bmsgc2l6ZVxubGlzdCA9IHJhbmdlKDAsIDUwKVxuY2h1bmsgPSA1XG5cbiMgU3BsaXQgdXAgeW91ciBsaXN0IGludG8gY2h1bmtzXG5bbGlzdFtpOmkgKyBjaHVua10gZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGxpc3QpLCBjaHVuayldIn0=

12. Parcourir une liste en Python

On parcourt facilement une liste avec une boucle for. La boucle exécute une action pour chaque élément.

En Python, cela ressemble à :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgVGhpcyBpcyB5b3VyIGxpc3Rcbm15bGlzdCA9IFtbMSwyLDNdLFs0LDUsNiw3XSxbOCw5LDEwXV1cblxuIyBMb29wIG92ZXIgeW91ciBsaXN0IGFuZCBwcmludCBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2Ygc2l6ZSAzXG5mb3IgeCBpbiBteWxpc3Q6XG4gICAgICBpZiBsZW4oeCk9PTM6XG4gICAgICAgIHByaW50KHgpIn0=

Vous avez une liste mylist, et vous demandez à Python d’imprimer les sous‑listes de longueur 3. Ici, ce seront [1,2,3] et [8, 9,10].

Remarque : x peut s’appeler element, listElement, etc. Essayez dans la console.

Vous ne voyez pas les indices dans ce résultat. Pour itérer avec les indices, faites :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgVGhpcyBpcyB5b3VyIGxpc3Rcbm15TGlzdCA9IFszLDQsNSw2XVxuXG4jIExvb3Agb3ZlciBgbXlMaXN0YCBhbmQgcHJpbnQgdHVwbGVzIG9mIGFsbCBpbmRpY2VzIGFuZCB2YWx1ZXMgXG5mb3IgaSwgdmFsIGluIGVudW1lcmF0ZShteUxpc3QpOlxuICAgICBwcmludChpLCB2YWwpIn0=

Ici, enumerate(myList) renvoie un couple (indice, valeur). On récupère donc i, val dans la boucle.

Remarque : vous pouvez aussi utiliser une compréhension de liste pour boucler. L’affichage est immédiat sans passer par print() :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibXlMaXN0ID0gW1sxLDIsM10sWzQsNSw2LDddLFs4LDksMTBdXSIsInNhbXBsZSI6Ilt4IGZvciB4IGluIG15TGlzdCBpZiBsZW4oeCk9PTNdIn0=

13. Aplatir une liste de listes

Pour produire une liste simple à partir d’une liste de listes, vous pouvez utiliser sum(). Pensez à passer la liste et une liste vide comme point de départ :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgWW91ciBpbml0aWFsIGxpc3Qgb2YgbGlzdHNcbmxpc3QgPSBbWzEsMl0sWzMsNF0sWzUsNl1dXG5cbiMgRmxhdHRlbiBvdXQgeW91ciBvcmlnaW5hbCBsaXN0IG9mIGxpc3RzIHdpdGggYHN1bSgpYFxuc3VtKGxpc3QsIFtdKSJ9

Deux autres approches :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdE9mTGlzdHMgPSBbWzEsMl0sWzMsNF0sWzUsNl1dIiwic2FtcGxlIjoiIyBZb3UgY2FuIHJlZHVjZSB0aGUgbGlzdHMgb2YgbGlzdHMgb2YgbGlzdHMgbGlrZSB0aGlzXG5mcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXG5wcmludChyZWR1Y2UobGFtYmRhIHgseTogeCt5LGxpc3RPZkxpc3RzKSlcblxuIyBPciB5b3UgY2FuIHVzZSBsaXN0IGNvbXByZWhlbnNpb25cbnByaW50KFtpdGVtIGZvciBzdWJsaXN0IGluIGxpc3RPZkxpc3RzIGZvciBpdGVtIGluIHN1Ymxpc3RdKSJ9
    • Utiliser reduce() avec une lambda. reduce() agrège l’itérable en une valeur, selon la fonction fournie. Ici, on concatène cumulativement : [1,2] + [3,4], puis ce résultat + [5,6]. Visuellement :
([1,2]+[3,4])+[5,6]

À retenir : l’opérateur + concatène les listes.

  • Autre option : une compréhension de liste imbriquée. On parcourt chaque sublist puis chaque item de cette sous‑liste pour l’extraire.

On peut la réécrire avec des boucles for classiques :

list1 = []

for sublist in list:
  for item in sublist:
    list1.append(item)

14. Obtenir l’intersection de deux listes Python

Intersection avec compréhension de liste

Pour obtenir l’intersection, vous pouvez utiliser filter().

Illustration ci‑dessous. Nous avons défini list1 et list2. Utilisez le shell IPython pour inspecter leur contenu.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdDEgPSBbMSwgNiwgNywgMTAsIDEzLCAyOCwgMzIsIDQxLCA1OCwgNjNdXG5saXN0MiA9IFtbMTMsIDE3LCAxOCwgMjEsIDMyXSwgWzcsIDExLCAxMywgMTQsIDI4XSwgWzEsIDUsIDYsIDgsIDE1LCAxNl1dIiwic2FtcGxlIjoiIyBJbnRlcnNlY3QgYm90aCBsaXN0cyB3aXRoIGxpc3QgY29tcHJlaGVuc2lvblxuaW50ZXJzZWN0aW9uID0gW2xpc3QoZmlsdGVyKGxhbWJkYSB4OiB4IGluIGxpc3QxLCBzdWJsaXN0KSkgZm9yIHN1Ymxpc3QgaW4gbGlzdDJdXG5cbiMgUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJzZWN0aW9uXG5wcmludChfX19fKSIsInNvbHV0aW9uIjoiIyBJbnRlcnNlY3QgYm90aCBsaXN0cyB3aXRoIGxpc3QgY29tcHJlaGVuc2lvblxuaW50ZXJzZWN0aW9uID0gW2xpc3QoZmlsdGVyKGxhbWJkYSB4OiB4IGluIGxpc3QxLCBzdWJsaXN0KSkgZm9yIHN1Ymxpc3QgaW4gbGlzdDJdXG5cbiMgUHJpbnQgdGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJzZWN0aW9uXG5wcmludChpbnRlcnNlY3Rpb24pIiwic2N0IjoicHJlZGVmX21zZyA9IFwiZGlkIHlvdSBwYXNzIGBpbnRlcnNlY3Rpb25gIHRvIHRoZSBgcHJpbnQoKWAgZnVuY3Rpb24/XCJcbiMgVGVzdCBgcHJpbnRgXG50ZXN0X2Z1bmN0aW9uKFxuICAgIFwicHJpbnRcIixcbiAgICBub3RfY2FsbGVkX21zZz1wcmVkZWZfbXNnLFxuICAgIGluY29ycmVjdF9tc2c9cHJlZGVmX21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG5zdWNjZXNzX21zZyA9IFwiV2F5IHRvIGdvIVwiIn0=

Ici, filter() prend chaque élément de sous‑liste et vérifie s’il est dans la liste source list1. La compréhension de liste s’exécute pour chaque sous‑liste de list2.

Remarque : filter() renvoie un itérable, pas une liste ; entourez‑le de list() pour voir le résultat. Essayez sans list() pour comparer.

Pour plus de lisibilité, vous pouvez recourir à des compréhensions imbriquées :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdDEgPSBbMSwgNiwgNywgMTAsIDEzLCAyOCwgMzIsIDQxLCA1OCwgNjNdXG5saXN0MiA9IFtbMTMsIDE3LCAxOCwgMjEsIDMyXSwgWzcsIDExLCAxMywgMTQsIDI4XSwgWzEsIDUsIDYsIDgsIDE1LCAxNl1dIiwic2FtcGxlIjoiIyBBbiBpbnRlcnNlY3Rpb24gb2YgYm90aCBsaXN0cywgc3RvcmVkIGluIGBpbnRlcnNlY3Rpb25gXG5pbnRlcnNlY3Rpb24gPSBbW3ggZm9yIHggaW4gc3VibGlzdCBpZiB4IGluIGxpc3QxXSBmb3Igc3VibGlzdCBpbiBsaXN0Ml1cblxuIyBQcmludCB0aGUgcmVzdWx0IG9mIHRoZSBpbnRlcnNlY3Rpb25cbnByaW50KGludGVyc2VjdGlvbikifQ==

Intersection avec set()

Si l’ordre n’a pas d’importance et que les doublons ne posent pas de problème, utilisez l’intersection d’ensembles :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdDEgPSBbMSwgNiwgNywgMTAsIDEzLCAyOCwgMzIsIDQxLCA1OCwgNjNdXG5saXN0MiA9IFsxMywgMTcsIDE4LCAyMSwgMzIsIDcsIDExLCAxMywgMTQsIDI4LCAxLCA1LCA2LCA4LCAxNSwgMTZdIiwic2FtcGxlIjoiIyBNYWtlIHVzZSBvZiB0aGUgbGlzdCBhbmQgc2V0IGRhdGEgc3RydWN0dXJlc1xucHJpbnQobGlzdChzZXQobGlzdDEpICYgc2V0KGxpc3QyKSkpXG5cbiMgVXNlIGBpbnRlcnNlY3Rpb24oKWBcbnByaW50KGxpc3Qoc2V0KGxpc3QxKS5pbnRlcnNlY3Rpb24obGlzdDIpKSkifQ==

Dans le premier exemple, on convertit les deux listes en sets, on les intersecte, puis on reconvertit en liste. L’ordre final est arbitraire. On peut aussi ne convertir qu’une (la plus grande), puis appeler intersection() avec tout itérable.

Remarque : pour que cela fonctionne, vos listes ne doivent pas contenir d’autres listes. C’est pourquoi list2 est différente. Affichez‑la pour vérifier.

15. Supprimer les doublons d’une liste Python

Comme indiqué plus haut, si vous voulez une collection d’éléments uniques et non ordonnée, utilisez un set.

Pour créer un set à partir de n’importe quel itérable, passez‑le à set(). Pour revenir ensuite à une liste, passez le set à list().

À retenir : un itérable peut être une liste, un dictionnaire, etc. Vérifiez qu’une variable est itérable avec .__iter__.

Exemple clair de suppression de doublons avec set() :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgWW91ciBsaXN0IHdpdGggZHVwbGljYXRlIHZhbHVlc1xuZHVwbGljYXRlcyA9IFsxLCAyLCAzLCAxLCAyLCA1LCA2LCA3LCA4XVxuXG4jIFByaW50IHRoZSB1bmlxdWUgYGR1cGxpY2F0ZXNgIGxpc3RcbnByaW50KGxpc3Qoc2V0KGR1cGxpY2F0ZXMpKSlcblxuIyBBIGxpc3Qgd2l0aCBzbWFsbCBudW1iZXJzIFxuc21hbGxOdW1iZXJzID0gWzEsIDIsIDNdXG5cbiMgUHJpbnQgdGhlIHVuaXF1ZSBgZHVwbGljYXRlc2AgbGlzdCB3aXRob3V0IHRoZSBzbWFsbCBudW1iZXJzXG5saXN0KHNldChkdXBsaWNhdGVzKSAtIHNldChzbWFsbE51bWJlcnMpKSJ9

Comme on le voit dans le dernier résultat, l’ordre d’origine n’est pas conservé après soustraction de smallNumbers. Les sets étant non ordonnés, tout ordre est perdu. La conversion retour en liste crée un ordre arbitraire.

Si l’ordre compte, il faudra une autre approche. Cette page détaille le sujet.

16. Pourquoi utiliser NumPy plutôt que des listes Python ?

Quatre raisons principales reviennent chez les programmeurs Python :

  • les tableaux NumPy sont plus compacts que des listes,
  • l’accès (lecture/écriture) y est plus rapide,
  • NumPy est souvent plus pratique grâce aux nombreuses opérations vectorielles et matricielles disponibles,
  • et il est plus efficace car implémenté de façon optimisée.

17. Créer des tableaux NumPy vides

Pour créer un tableau NumPy vide :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6ImltcG9ydCBudW1weVxubnVtcHkuYXJyYXkoW10pIn0=

Pour initialiser un tableau, plusieurs options :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoiaW1wb3J0IG51bXB5Iiwic2FtcGxlIjoiIyBNYWtlIGEgTnVtUHkgYXJyYXkgb2YgZm91ciByb3dzIGFuZCB0d28gY29sdW1ucyBhbmQgZmlsbGVkIHdpdGggMFxubnVtcHkuemVyb3Moc2hhcGU9KDQsMikpXG5cbiMgTWFrZSBhIE51bVB5IGFycmF5IG9mIDEgdmFsdWVzIG9mIHRocmVlIGNvbHVtbnNcbm51bXB5Lm9uZXMoMylcblxuIyBNYWtlIGFuIGVtcHR5IE51bVB5IGFycmF5XG5udW1weS5lbXB0eShzaGFwZT0oMCwwKSkifQ==

Consultez cette documentation pour d’autres moyens d’initialiser un tableau NumPy.

18. Faire des calculs avec des listes en Python

Très souvent, au‑delà du stockage, on réalise des opérations mathématiques sur les listes. Voici les questions les plus fréquentes à ce sujet.

Calculer une moyenne pondérée

La moyenne pondérée est proche de la moyenne simple, mais prend en compte une valeur et son poids.

Exemple :

cost = [0.424, 0.4221, 0.4185, 0.4132, 0.413]
cases = [10, 20, 30, 40, 50]

Calculez la moyenne pondérée ainsi :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoib3N0ID0gWzAuNDI0LCAwLjQyMjEsIDAuNDE4NSwgMC40MTMyLCAwLjQxM11cbmNhc2VzID0gWzEwLCAyMCwgMzAsIDQwLCA1MF0iLCJzYW1wbGUiOiJmb3IgYyBpbiByYW5nZShsZW4oY29zdCkpOlxuICAgY29zdFtjXSA9IChjb3N0W2NdICogY2FzZXNbY10gLyBzdW0oY2FzZXMpKVxuY29zdCA9IHN1bShjb3N0KVxucHJpbnQoY29zdCkifQ==

Ou avec ces alternatives :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoib3N0ID0gWzAuNDI0LCAwLjQyMjEsIDAuNDE4NSwgMC40MTMyLCAwLjQxM11cbmNhc2VzID0gWzEwLCAyMCwgMzAsIDQwLCA1MF0iLCJzYW1wbGUiOiJzdW0oY29zdFtjXSAqIGNhc2VzW2NdIC8gc3VtKGNhc2VzKSBmb3IgYyBpbiByYW5nZShsZW4oY29zdCkpKSJ9

Ou encore :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoib3N0ID0gWzAuNDI0LCAwLjQyMjEsIDAuNDE4NSwgMC40MTMyLCAwLjQxM11cbmNhc2VzID0gWzEwLCAyMCwgMzAsIDQwLCA1MF0iLCJzYW1wbGUiOiJzdW0oY29zdFtjXSAqIGNhc2VzW2NdIGZvciBjIGluIHJhbmdlKGxlbihjb3N0KSkpIC8gc3VtKGNhc2VzKSJ9

Enfin, vous pouvez utiliser zip().

Astuce : créez une variable costAndCases à laquelle vous assignez zip() avec cost et cases. Vous verrez une liste de tuples : la première valeur est le coût, la seconde le nombre de cas achetés à ce prix.

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoib3N0ID0gWzAuNDI0LCAwLjQyMjEsIDAuNDE4NSwgMC40MTMyLCAwLjQxM11cbmNhc2VzID0gWzEwLCAyMCwgMzAsIDQwLCA1MF0iLCJzYW1wbGUiOiIjIFNlZSB3aGF0IGB6aXAoKWA gZG9lcyB0byB5b3VyIGBjb3N0YCBhbmQgYGNhc2VzYFxucHJpbnQobGlzdCh6aXAoX19fXywgX19fXykpKVxuXG4jIENhbGN1bGF0ZSB0aGUgd2VpZ2h0ZWQgYXZlcmFnZVxucHJpbnQoc3VtKFtg eCAqIHkgZm9yIHgsIHkgaW4gemlwKGNvc3QsIGNhc2VzKV0pIC8gc3VtKGNhc2VzKSkiLCJzb2x1dGlvbiI6IiMgU2VlIHdoYXQgYHppcCgpYCBkb2VzIHRvIHlvdXIgbGlzdHNcbnByaW50KGxpc3QoemlwKGNvc3QsIGNhc2VzKSkpXG5cbiMgQ2FsY3VsYXRlIHRoZSB3ZWlnaHRlZCBhdmVyYWdlXG5wcmludChzdW0oW3ggKiB5IGZvciB4LCB5IGluIHppcChjb3N0LCBjYXNlcyldKSAvIHN1bShjYXNlcykpIiwic2N0IjoicHJlZGVmX21zZyA9IFwiRG9uJ3QgZm9yZ2V0IHRvIGFkZCB0aGUgYHppcCgpYCBmdW5jdGlvbiBhbmQgdG8gcGFzcyBgY29zdGAgYW5kIGBjYXNlYCB0byBpdCFcIiMgVGVzdCBvYmplY3QgY29zdEFuZENhc2VzXG50ZXN0X2Z1bmN0aW9uKCBcInppcFwiLCAgICAgICAgICAgICAgbm90X2NhbGxlZF9tc2cgPSBcIkhhdmUgeW91IGNyZWF0ZWQgdGhlIGNvc3RBbmRDYXNlcyB2YXJpYWJsZT8gRG9uJ3QgZm9yZ2V0IHRvIHBhc3MgYGNvc3RgIGFuZCBgY2FzZXNgIHRvIGB6aXAoKWAgdG8gY3JlYXRlIGl0IVwiLCAgICAgICAgICAgICAgaW5jb3JyZWN0X21zZz1wcmVkZWZfbXNnLCAgICAgICAgICAgICAgZG9fZXZhbD1GYWxzZSlcbnN1Y2Nlc3NfbXNnKFwiQXdlc29tZSB3b3JrIVwiKSJ9

À retenir : zip() associe deux listes élément par élément. Par exemple, zip(cost, cases) donne [(0.424, 10), (0.4221, 20), (0.4185, 30), (0.4132, 40), (0.413, 50)].

Calculer un quantile en Python

Les quantiles sont essentiels pour résumer un jeu de données, aux côtés des valeurs min et max. On parle souvent des 25e, 50e et 75e percentiles (1er quartile, médiane, 3e quartile).

Au total, cinq nombres suffisent pour résumer un jeu de données : minimum, maximum, médiane et deux quartiles.

Min et max sont faciles à trouver. Quid des percentiles ?

Simple : supposons 25 observations triées du plus petit au plus grand :

  • Le 25e percentile (Q1) : 0,25 × 25 = 6,25 → 7e observation (en arrondissant).
  • Le 75e percentile (Q3) : 0,75 × 25 = 18,75 → 19e observation.
  • La médiane : 0,5 × 25 = 12,5 → 13e observation.

Comment le coder ?

Le plus simple est d’utiliser NumPy. Suivez les indications ci‑dessous pour calculer les percentiles de votre liste :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgSW1wb3J0IG51bXB5IGFzIG5wXG5pbXBvcnQgX19fXyBhcyBfX1xuXG4jIE1ha2UgYSBOdW1QeSBhcnJheVxuYSA9IG5wLmFycmF5KFsxLDIsMyw0LDVdKVxuXG4jIFJldHVybiB0aGUgNTB0aCBwZXJjZW50aWxlIG9mIG91ciBOdW1QeSBhcnJheVxucCA9IG5wLnBlcmNlbnRpbGUoYSwgNTApXG5cbiNQcmludCB0aGUgcmVzdWx0XG5wcmludChfX19fKSIsInNvbHV0aW9uIjoiIyBJbXBvcnQgbnVtcHkgYXMgbnBcbmltcG9ydCBudW1weSBhcyBucFxuXG4jIE1ha2UgYSBOdW1QeSBhcnJheVxuYSA9IG5wLmFycmF5KFsxLDIsMyw0LDVdKVxuXG4jIFJldHVybiB0aGUgNTB0aCBwZXJjZW50aWxlIG9mIG91ciBOdW1QeSBhcnJheVxucCA9IG5wLnBlcmNlbnRpbGUoYSwgNTApXG5cbiNQcmludCB0aGUgcmVzdWx0XG5wcmludChwKSIsInNjdCI6InByZWRlZl9tc2cgPSBcIkhhdmUgeW91IGltcG9ydGVkIG51bXB5IGFuZCBwcmludGVkIG91dCB0aGUgcGVyY2VudGlsZSByZXN1bHQ/XCJcbnF1YW50aWxlX3ByaW50X21zZyA9IFwiRG9uJ3QgZm9yZ2V0IHRvIHBhc3MgYHBgIHRvIGBwcmludCgpYCFcIlxuaW1wb3J0X21zZyA9IFwiSGF2ZSB5b3UgaW1wb3J0ZWQgbnVtcHk/XCJcbnRlc3RfZnVuY3Rpb24oXG4gICAgXCJwcmludFwiLFxuICAgIG5vdF9jYWxsZWRfbXNnPXByZWRlZl9tc2csXG4gICAgaW5jb3JyZWN0X21zZz1xdWFudGlsZV9wcmludF9tc2csXG4gICAgZG9fZXZhbD1GYWxzZVxuKVxuIyBUZXN0IGltcG9ydCBgbnVtcHlgXG50ZXN0X2ltcG9ydChcIm51bXB5XCIsIHNhbWVfYXMgPSBUcnVlLCBub3RfaW1wb3J0ZWRfbXNnID0gaW1wb3J0X21zZywgaW5jb3JyZWN0X2FzX21zZyA9IHByZWRlZl9tc2cpXG5zdWNjZXNzX21zZyhcIkZhbnRhc3RpYyFcIikifQ==

Sommer deux listes élément par élément

Supposons :

list1=[1, 2, 3]
list2=[4, 5, 6]

Vous voulez additionner 1+4, 2+5, 3+6. Deux façons :

À suivre !

… En Python « pur »

Utilisez map avec operator.add :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdDE9WzEsIDIsIDNdXG5saXN0Mj1bNCwgNSwgNl0iLCJzYW1wbGUiOiJmcm9tIG9wZXJhdG9yIGltcG9ydCBhZGRcbmxpc3QobWFwKGFkZCwgbGlzdDEsIGxpc3QyKSkifQ==

Résultat : [5, 7, 9].

Remarque : utilisez list() pour afficher le résultat de map().

Ou zip() avec une compréhension :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInByZV9leGVyY2lzZV9jb2RlIjoibGlzdDE9WzEsIDIsIDNdXG5saXN0Mj1bNCwgNSwgNl0iLCJzYW1wbGUiOiJbc3VtKHgpIGZvciB4IGluIHppcChsaXN0MSwgbGlzdDIpXSJ9

… Avec NumPy

Sur de plus grands volumes, préférez numpy.

Importez la bibliothèque et convertissez les listes en tableaux NumPy :

eyJsYW5ndWFnZSI6InB5dGhvbiIsInNhbXBsZSI6IiMgSW1wb3J0IG51bXB5IGFzIG5wXG5pbXBvcnQgX19fXyBhcyBfX1xuXG4jIE1ha2UgeW91ciBsaXN0cyBpbnRvIE51bVB5IGFycmF5c1xudmVjdG9yMSA9IG5wLmFycmF5KFsxLCAyLCAzXSlcbnZlY3RvcjIgPSBucC5hcnJheShbNCwgNSwgNl0pXG5cbiMgRWxlbWVudC13aXNlIGFkZGl0aW9uXG5zdW1fdmVjdG9yID0gdmVjdG9yMSArIHZlY3RvcjIgXG5cbiMgUHJpbnQgdGhlIHJlc3VsdFxucHJpbnQoX19fXykiLCJzb2x1dGlvbiI6IiMgSW1wb3J0IG51bXB5IGFzIG5wXG5pbXBvcnQgbnVtcHkgYXMgbnBcblxuIyBNYWtlIHlvdXIgbGlzdHMgaW50byBOdW1QeSBhcnJheXNcbnZlY3RvcjEgPSBucC5hcnJheShbMSwgMiwgM10pXG52ZWN0b3IyID0gbnAuYXJyYXkoWzQsIDUsIDZdKVxuXG4jIEVsZW1lbnQtd2lzZSBhZGRpdGlvblxuc3VtX3ZlY3RvciA9IHZlY3RvcjEgKyB2ZWN0b3IyIFxuXG4jIFByaW50IHRoZSByZXN1bHRcbnByaW50KHN1bV92ZWN0b3IpIiwic2N0IjoicHJlZGVmX21zZyA9IFwiRGlkIHlvdSBpbXBvcnQgbnVtcHkgYW5kIHByaW50IHRoZSByZXN1bHQ/XCJcbnByaW50X21zZz0gXCJEaWQgeW91IHBhc3MgYHN1bV92ZWN0b3JgIGB0byBwcmludCgpYFwiXG5pbXBvcnRfbXNnPVwiRG9uJ3QgZm9yZ2V0IHRvIGltcG9ydCBudW1weSBhcyBucCFcIlxudGVzdF9mdW5jdGlvbihcbiAgICBcInByaW50XCIsXG4gICAgbm90X2NhbGxlZF9tc2c9cHJlZGVmX21zZyxcbiAgICBpbmNvcnJlY3RfbXNnPXByaW50X21zZyxcbiAgICBkb19ldmFsPUZhbHNlXG4pXG50ZXN0X2ltcG9ydChcIm51bXB5XCIsIHNhbWVfYXMgPSBUcnVlLCBub3RfaW1wb3J0ZWRfbXNnID0gaW1wb3J0X21zZywgaW5jb3JyZWN0X2FzX21zZyA9IHByZWRlZl9tc2cpXG5zdWNjZXNzX21zZyA9IFwiWW91J3JlIG9mZmljaWFsbHkgYSBQeXRob24gbGlzdCBleHBlcnQhXCIifQ==

Et ensuite dans votre parcours Data Science avec Python ?

Vous avez terminé ce tutoriel interactif sur les listes. C’était dense, mais vous y êtes arrivé !

Les listes ne sont qu’une brique essentielle. Il y a tant à explorer ! Notre cours Intro to Python for Data Science est parfait pour approfondir et découvrir comment Python est utilisé en data science : des bases jusqu’à une introduction à NumPy. Idéal pour les débutants !

Si vous êtes déjà plus avancé, jetez un œil à notre cours Intermediate Python For Data Science, conçu pour passer au niveau supérieur. Il aborde d’autres bibliothèques (matplotlib, pandas), des concepts comme la logique, le contrôle de flux, et inclut une étude de cas pour consolider vos acquis.

Vous utilisez déjà Python pour la data science et voulez aller plus loin ? Intéressez‑vous à notre cours Importing Data Into Python ou lisez notre série de tutoriels sur l’importance du prétraitement dans le pipeline de machine learning !

Sujets
Python
Analyse des données

En savoir plus sur Python

Cours

Introduction à la Data Science en Python

4 h
502.3K
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow