Ce tutoriel vous montre tout ce que vous devez savoir pour vous aider à maîtriser l’essentielle méthode pop()
du type de données conteneur le plus fondamental du langage de programmation Python.
Définition et utilisation :
La méthode list.pop()
supprime et renvoie le dernier élément d’un list
existant. La méthode list.pop(index)
avec l’argument facultatif index
supprime et renvoie l’élément à la position index
.
Voici un petit exemple:
>>> lst = >>> lst.pop()3>>> lst
Dans la première ligne de l’exemple, vous créez la liste lst
. Vous supprimez ensuite et retournez le dernier élément 3 de la liste. Le résultat est la liste avec seulement deux éléments .
Code Puzzle – Essayez vous-même:
Maintenant vous connaissez les bases. Approfondissons votre compréhension avec un petit puzzle de code – pouvez-vous le résoudre ?
Vous pouvez également résoudre ce puzzle et suivre vos compétences en Python sur notre application interactive Finxter.
Syntaxe:
Vous pouvez appeler cette méthode sur chaque objet liste en Python. Voici la syntaxe:
list.pop(index=-1)
Arguments :
Argument | Description |
---|---|
index |
Argument facultatif. Vous pouvez définir l’index de l’élément à retirer et à retourner. L’argument par défaut conduit à la suppression du dernier élément de la liste avec l’indice -1. |
Valeur de retour :
La méthode list.pop()
a pour valeur de retour Object
. Elle supprime l’élément particulier de la liste (par défaut : le dernier élément) et le renvoie directement à l’appelant.
Vidéo:
- Le guide ultime des listes Python
Voici votre antisèche PDF gratuite vous montrant toutes les méthodes de liste Python sur une simple page. Cliquez sur l’image pour télécharger le fichier PDF haute résolution, l’imprimer et l’afficher sur le mur de votre bureau :
Table des matières
Liste Python pop() par index.
Vous pouvez utiliser la méthode list.pop(index)
avec l’argument optionnel index pour retirer et retourner l’élément à la position index
de la liste.
Voici un exemple :
>>> customers = >>> customers.pop(2)'Ann'>>> customers>>> customers.pop(0)'Alice'>>> customers
Après avoir créé la liste avec quatre éléments, vous retirez et retournez d’abord le deuxième élément 'Ann'
. Ensuite, vous retirez et retournez le premier élément 'Alice'
. La liste résultante n’a plus que deux éléments.
Python List pop() First / Front / Left / Head
La méthode list.pop(index)
à avec l’argument optionnel index pour retirer et retourner l’élément à la position index
de la liste. Ainsi, si vous voulez supprimer le premier élément de la liste, il suffit de définir index=0
en appelant list.pop(0)
. Cela fera sauter le premier élément de la liste.
Voici un exemple:
>>> primes = >>> primes.pop(0)1>>> primes
La méthode pop(0)
supprime le premier élément 1 de la liste des nombres premiers donnée en exemple.
La liste Python pop() par valeur
Dans les deux exemples précédents, vous avez vu comment pop des éléments par indice. Mais pouvez-vous également pop par valeur ?
Oui, vous le pouvez en utilisant la méthode list.index(value)
qui vous donne l’indice de la valeur de l’élément dans la liste. Maintenant, vous pouvez utiliser la méthode list.pop(index)
sur cet index pour retirer la valeur de la liste et obtenir le résultat comme valeur de retour.
Voici un exemple où vous voulez faire sortir l’élément 7 de la liste et stocker le résultat dans la variable some_prime
.
>>> primes = >>> some_prime = primes.pop(primes.index(7))>>> some_prime7
Si la valeur de retour ne vous intéresse pas mais que vous voulez seulement supprimer la première occurrence de la valeur x
dans la list
, utilisez la méthode list.remove(x)
.
Article connexe:
- Python List remove()
Python List pop() Multiple Elements
Si vous pouvez pop un élément d’une liste Python, la question naturelle est de savoir si vous pouvez également pop plusieurs éléments en même temps ?
La réponse est non. Vous ne pouvez pas directement extraire plusieurs éléments d’une liste. Mais vous pouvez le faire indirectement avec une simple instruction de compréhension de liste.
Python List pop() First n Elements
Disons que vous voulez pop les n premiers éléments d’une liste. Comment faire ?
Vous créez simplement une liste de valeurs en utilisant la compréhension de liste pour retirer et retourner les premiers n
éléments de la liste.
Voici un autre exemple :
>>> lst = >>> popped = >>> popped>>> lst
La liste éclatée contient les cinq premiers éléments. La liste originale n’a plus qu’un seul élément.
Python List pop() Last n Elements
Disons que vous voulez faire sauter les n derniers éléments d’une liste. Comment faire ?
Vous créez simplement une liste de valeurs en utilisant la compréhension de liste pour retirer et retourner les derniers n
éléments de la liste.
Voici un autre exemple :
>>> lst = >>> >>> lst
La liste éclatée contient les cinq derniers éléments. La liste originale n’a plus qu’un seul élément.
Complexité temporelle de Python List pop()
La complexité temporelle de la méthode pop()
est constante O(1). Quel que soit le nombre d’éléments dans la liste, popper un élément d’une liste prend le même temps (plus moins des facteurs constants).
La raison est que les listes sont implémentées avec des tableaux dans cPython. Récupérer un élément d’un tableau a une complexité constante. Retirer l’élément du tableau a également une complexité constante. Ainsi, la récupération et le retrait de l’élément comme fait par la méthode pop()
a une complexité d’exécution constante aussi.
J’ai écrit un court script pour évaluer la complexité d’exécution de la méthode pop()
en Python:
import matplotlib.pyplot as pltimport timey = for i in : lst = list(range(i)) t0 = time.time() x = lst.pop(0) t1 = time.time() y.append(t1-t0)plt.plot(y)plt.xlabel("List elements (10**5)")plt.ylabel("Time (sec)")plt.show()
Le graphique résultant montre que la complexité d’exécution est linéaire, même si le nombre d’éléments augmente drastiquement :
(D’accord, il y a quelques bosses mais qui s’en soucie vraiment ?)
Notez que la complexité d’exécution est toujours linéaire si nous popons le dernier élément ou tout autre élément arbitraire de la liste.
Python List pop() vs remove()
Quelle est la différence entre la liste.pop() et la méthode list.remove() ?
- La méthode
list.remove(element)
supprime la première occurrence de laelement
d’unelist
existante. Elle ne supprime cependant pas toutes les occurrences de l’élément dans la liste ! - La méthode
list.pop()
supprime et renvoie le dernier élément d’unelist
existante. La méthodelist.pop(index)
avec l’argument facultatifindex
supprime et retourne l’élément à la positionindex
.
Donc, la méthode remove supprime par valeur et la méthode pop supprime par indice. De plus, la méthode remove ne renvoie rien (elle opère sur la liste elle-même) et la méthode pop renvoie l’objet supprimé.
Python List Pop and Push (Stack)
Python n’a pas de structure de données de pile intégrée car elle n’est pas nécessaire. Vous pouvez simplement créer une liste vide et l’appeler stack. Ensuite, vous utilisez la méthode stack.append(x) pour pousser l’élément x sur la pile. Et vous suivez la méthode stack.pop() pour pousser l’élément le plus haut de la pile.
Voici un exemple qui montre comment pousser trois valeurs dans la pile et ensuite les retirer dans l’ordre traditionnel First-In Last-Out (FILO) des piles.
>>> stack = >>> stack.append(5)>>> stack.append(42)>>> stack.append("Ann")>>> stack.pop()'Ann'>>> stack.pop()42>>> stack.pop()5>>> stack
Python List pop() Without Remove
Vous voulez pop()
un élément d’une liste donnée sans le supprimer ? Ne le faites pas ! Utilisez plutôt une simple indexation. Pour obtenir un élément d’index i
à partir de list
, il suffit d’utiliser le schéma d’indexation list
. Cela permettra de conserver l’élément d’origine dans la liste sans le supprimer.
Python List pop() If Not Empty
Comment pouvez-vous pop() un élément uniquement si la liste n’est pas vide en une seule ligne de code ? Utilisez l’opérateur ternaire en Python lst.pop() if lst else None
comme suit:
>>> lst = >>> for i in range(5):print(lst.pop() if lst else None)321NoneNone
Vous essayez de pop l’élément le plus à gauche cinq fois à partir d’une liste avec seulement trois valeurs. Cependant, il n’y a pas de message d’erreur grâce à votre utilisation compétente de l’opérateur ternaire qui vérifie en une seule ligne si la liste est vide. Si elle est vide, elle ne saute pas mais renvoie la valeur None
.
Si vous n’utilisez pas l’opérateur ternaire dans cet exemple, Python lancera un IndexError
lorsque vous tenterez de faire un pop à partir d’une liste vide :
>>> lst = >>> for i in range(5):print(lst.pop())321Traceback (most recent call last): File "<pyshell#15>", line 2, in <module> print(lst.pop())IndexError: pop from empty list
La liste Python pop() Slice
Peut-on faire un pop sur toute une tranche à la fois ? Eh bien, vous pouvez supprimer une tranche entière en utilisant le mot-clé del : pour supprimer la tranche lst
de la liste, vous pouvez appeler del lst
. Cependant, vous n’obtiendrez pas la tranche comme valeur de retour, donc vous pouvez vouloir stocker la tranche dans une variable séparée d’abord, avant de la supprimer de la liste.
Python List pop() While Iterating
Il est toujours dangereux de modifier une liste sur laquelle vous itérez actuellement.
Pourquoi ? Parce que l’itérateur n’est créé qu’une seule fois dans la définition de la boucle et qu’il s’entêtera à vous donner les indices qu’il a préparés au départ. Si la boucle change, les indices des éléments changent aussi. Mais l’itérateur n’adapte pas les indices pour tenir compte de ces changements. Voici un exemple :
>>> lst = list(range(10))>>> for i in range(len(lst)):lst.pop(i)02468Traceback (most recent call last): File "<pyshell#20>", line 2, in <module> lst.pop(i)IndexError: pop index out of range
Ouah, c’était inattendu, n’est-ce pas ? Vous avez poppé seulement un élément sur deux de la liste. Pourquoi ? Parce que dans la première itération, la variable d’index i=0
. Maintenant, nous supprimons cet élément de la liste. L’élément 1 de la liste a maintenant l’indice 0 après la suppression de l’élément de tête précédent. Mais dans la deuxième itération de la boucle, la variable de la boucle a l’index i=1
. C’est l’élément suivant à enlever. Mais vous avez sauté l’élément 1 de la liste à l’indice de position 0 ! Seul un élément sur deux est poppé en conséquence.
Autres façons de supprimer des éléments d’une liste
Il existe d’autres façons de supprimer des éléments de la liste. Voir le tableau récapitulatif :
Méthode | Description |
---|---|
lst.remove(x) |
Supprimer un élément de la liste (par valeur) | lst.pop() |
Supprimer un élément de la liste (par indice) et retourner l’élément |
lst.clear() |
Supprimer tous les éléments de la liste |
del lst |
Supprimer un ou plusieurs éléments de la liste (par indice ou par tranche) | Compréhension de la liste | Supprimer tous les éléments qui répondent à une certaine condition |
A la suite, vous allez plonger dans chacune de ces méthodes pour acquérir une compréhension approfondie.
remove() – Supprimer un élément par valeur
Pour supprimer un élément de la liste, utilisez la méthode list.remove(element)
que vous avez déjà vue précédemment :
>>> lst = >>> lst.remove("Ann")>>> lst
Essayez vous-même :
La méthode va de gauche à droite et supprime la première occurrence de l’élément qui est égal à celui à supprimer.
L’élément supprimé n’existe pas
Si vous essayez de supprimer l’élément x de la liste mais que x n’existe pas dans la liste, Python lance une erreur de valeur :
>>> lst = >>> lst.remove('Frank')Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> lst.remove('Frank')ValueError: list.remove(x): x not in list
pop() – Suppression d’un élément par index
Par défaut, la méthode pop()
supprime le dernier élément de la liste et retourne l’élément.
>>> lst = >>> lst.pop()'Ann'>>> lst
Mais vous pouvez également définir l’argument optionnel index. Dans ce cas, vous supprimerez l’élément à l’indice donné – un secret Python peu connu !
>>> lst = >>> lst.pop(1)'Bob'>>> lst
clear() – Supprimer tous les éléments
La méthode clear()
supprime simplement tous les éléments d’un objet liste donné.
>>> lst = >>> lst.clear()>>> lst
Del – Suppression des éléments par index ou tranche
Cette astuce est également relativement peu connue des débutants en Python :
- Utiliser
del lst
pour supprimer l’élément à l’index. - Utiliser
del lst
pour supprimer tous les éléments dans la tranche.
>>> lst = list(range(10))>>> lst>>> del lst>>> lst>>> del lst>>> lst
Articles de blog associés:
- Voyez mon tutoriel complet sur la tranche qui fait de vous un maître de la tranche en 15 minutes environ !
Compréhension de liste – Supprimer des éléments de manière conditionnelle
Ok, c’est un peu de la triche parce que cette méthode ne supprime pas vraiment les éléments d’un objet liste. Elle crée simplement une nouvelle liste avec certains éléments qui répondent à votre condition.
La compréhension de liste est un moyen compact de créer des listes. La formule simple est .
- Expression : Que faire avec chaque élément de liste ?
- Contexte : Quels éléments de liste sélectionner ? Elle consiste en un nombre arbitraire d’instructions for et if.
L’exemple crée la liste
.
Vous pouvez également définir une condition telle que toutes les valeurs impaires x%2==1
dans la partie contexte en utilisant une condition if. Cela nous conduit à un moyen de supprimer tous les éléments qui ne remplissent pas une certaine condition dans une liste donnée.
>>> lst = list(range(10))>>> lst_new = >>> lst_new
Alors que vous itérez sur toute la liste lst
, la condition x%2
exige que les éléments soient impairs.
Articles de blog connexes:
- Voyez mon tutoriel complet sur la compréhension des listes pour un apprentissage maximal!
Python List pop() Thread Safe
Avez-vous plusieurs threads qui accèdent à votre liste en même temps ? Alors vous devez être sûr que les opérations sur la liste (comme pop()
) sont réellement thread safe.
En d’autres termes : pouvez-vous appeler l’opération pop()
dans deux threads sur la même liste en même temps ? (Et pouvez-vous être sûr que le résultat est significatif ?)
La réponse est oui (si vous utilisez l’implémentation cPython). La raison en est le verrouillage global de l’interpréteur de Python qui garantit qu’un thread qui travaille actuellement sur son code terminera d’abord son opération Python de base actuelle telle que définie par l’implémentation cPython. Ce n’est que s’il termine cette opération que le prochain thread pourra accéder à la ressource de calcul. Ceci est assuré avec un schéma de verrouillage sophistiqué par l’implémentation cPython.
La seule chose que vous devez savoir est que chaque opération de base dans l’implémentation cPython est atomique. Elle est exécutée entièrement et en une seule fois avant qu’un autre thread ait la chance de s’exécuter sur le même moteur virtuel. Par conséquent, il n’y a pas de conditions de course. Un exemple pour une telle race condition serait le suivant : le premier thread lit une valeur de la liste, le second thread écrase la valeur, et le premier thread écrase à nouveau la valeur invalidant l’opération du second thread.
Toutes les opérations cPython sont thread-safe. Mais si vous combinez ces opérations dans des fonctions de plus haut niveau, celles-ci ne sont généralement pas thread-safe car elles consistent en de nombreuses opérations (éventuellement imbriquées).
Où aller maintenant ?
La méthode list.remove(element)
supprime la première occurrence de element
de list
.
Vous avez appris les tenants et aboutissants de cette importante méthode de liste Python.
Si vous continuez à vous battre avec ces commandes Python de base et que vous vous sentez bloqué dans votre progression d’apprentissage, j’ai quelque chose pour vous : Python One-Liners (lien Amazon).
Dans ce livre, je vous donnerai un aperçu complet des sujets informatiques critiques tels que l’apprentissage automatique, les expressions régulières, la science des données, NumPy et les bases de Python – le tout en une seule ligne de code Python !
Obtenez le livre sur Amazon !
DESCRIPTION OFFICIELLE DU LIVRE : Python One-Liners montrera aux lecteurs comment effectuer des tâches utiles avec une ligne de code Python. Après une brève remise à niveau sur Python, le livre aborde des sujets avancés essentiels tels que le découpage, la compréhension des listes, la diffusion, les fonctions lambda, les algorithmes, les expressions régulières, les réseaux neuronaux, la régression logistique et bien plus encore. Chacune des 50 sections du livre introduit un problème à résoudre, accompagne le lecteur à travers les compétences nécessaires pour résoudre ce problème, puis fournit une solution Python concise en une ligne avec une explication détaillée.
Alors qu’il travaillait comme chercheur dans les systèmes distribués, le Dr Christian Mayer a découvert sa passion pour l’enseignement de l’informatique aux étudiants.
Pour aider les étudiants à atteindre des niveaux supérieurs de réussite en Python, il a fondé le site Web d’éducation à la programmation Finxter.com. Il est l’auteur du populaire livre de programmation Python One-Liners (NoStarch 2020), coauteur de la série de livres autoédités Coffee Break Python, passionné d’informatique, pigiste et propriétaire de l’un des 10 plus grands blogs Python au monde.
Ses passions sont l’écriture, la lecture et le codage. Mais sa plus grande passion est de servir les aspirants codeurs à travers Finxter et de les aider à booster leurs compétences. Vous pouvez rejoindre son académie gratuite par e-mail ici.
.