Comment supprimer un élément d'une liste par index en Python?
J'ai trouvé la list.remove
méthode, mais dis que je veux supprimer le dernier élément, comment faire? Il semble que la suppression par défaut recherche dans la liste, mais je ne veux pas effectuer de recherche.
O(n)
en fonctionnement temporel.deque()
fournit des opérations efficaces aux deux extrémités mais ne fournit pas d'insertions / recherches / suppressions O (1) au milieu.O(n)
accès à l'indexa[i]
(en raison des listes chaînées). Remarque: l'implémentation basée sur un tableau fournitO(1)
un accès à l'index.Réponses:
Utilisez
del
et spécifiez l'index de l'élément que vous souhaitez supprimer:Prend également en charge les tranches:
Voici la section du tutoriel.
la source
PyList_GetItem()
retourne essentiellement((PyListObject *)op) -> ob_item[i];
- lei
e élément d'un tableau.Vous voulez probablement
pop
:Par défaut,
pop
sans aucun argument supprime le dernier élément:la source
pop()
en soi est très évidente, alors qu'ellepop(-1)
est potentiellement déroutante précisément parce qu'elle est redondante.pop
dans la plupart des langages de programmation supprime généralement le dernier élément, comme il le fait en Python. Donc, si vous spécifiez -1 ou rien, c'est la même chose.pop()
retourne tout élément qu'il a supprimé.Comme d'autres mentionnés, pop et del sont les moyens efficaces de supprimer un élément d'index donné. Pourtant, juste pour le plaisir de terminer (puisque la même chose peut être faite de plusieurs façons en Python):
Utilisation de tranches (cela ne supprime pas en place l'élément de la liste d'origine):
(Ce sera également la méthode la moins efficace lorsque vous travaillerez avec une liste Python, mais cela pourrait être utile (mais pas efficace, je le répète) lorsque vous travaillez avec des objets définis par l'utilisateur qui ne prennent pas en charge la pop, mais définissez néanmoins a
__getitem__
):Remarque: Veuillez noter que cette méthode ne modifie pas la liste en place comme
pop
etdel
. Il crée à la place deux copies de listes (une depuis le début jusqu'à l'index mais sans lui (a[:index]
) et une après l'index jusqu'au dernier élément (a[index+1:]
)) et crée un nouvel objet liste en ajoutant les deux. Il est ensuite réaffecté à la variable de liste (a
). L'ancien objet liste est donc déréférencé et donc récupéré (à condition que l'objet liste d'origine ne soit référencé par aucune variable autre que a).Cela rend cette méthode très inefficace et peut également produire des effets secondaires indésirables (en particulier lorsque d'autres variables pointent vers l'objet de liste d'origine qui reste non modifié).
Merci à @MarkDickinson de l'avoir signalé ...
Cette réponse Stack Overflow explique le concept de découpage.
Notez également que cela ne fonctionne qu'avec des indices positifs.
Lors de l'utilisation avec des objets, la
__getitem__
méthode doit avoir été définie et, plus important encore, la__add__
méthode doit avoir été définie pour renvoyer un objet contenant des éléments des deux opérandes.En substance, cela fonctionne avec tout objet dont la définition de classe est comme:
Cela fonctionne avec
list
qui définit__getitem__
et les__add__
méthodes.Comparaison des trois voies en termes d'efficacité:
Supposons que ce qui suit est prédéfini:
La
del object[index]
méthode:De loin la méthode la plus efficace. Il fonctionne avec tous les objets qui définissent une
__del__
méthode.Le démontage est le suivant:
Code:
Démontage:
pop
méthode:Elle est moins efficace que la méthode del et est utilisée lorsque vous avez besoin d'obtenir l'élément supprimé.
Code:
Démontage:
La méthode tranche et ajout.
Le moins efficace.
Code:
Démontage:
Remarque: Dans les trois démontages, ignorez les deux dernières lignes qui le sont essentiellement
return None
. Les deux premières lignes chargent également les valeurs globalesa
etindex
.la source
a = a[:index] + a[index+1 :]
-trick était le plus savant en ce qui concerne les énormes listes. Toutes les autres méthodes se sont retrouvées dans une impasse. Merci beaucouppop
est également utile pour supprimer et conserver un élément d'une liste. Oùdel
jette réellement l'élément.la source
Si vous souhaitez supprimer l'élément de position spécifique dans une liste, comme les 2ème, 3ème et 7ème. tu ne peux pas utiliser
Étant donné qu'après avoir supprimé le deuxième élément, le troisième élément que vous supprimez est en fait le quatrième élément de la liste d'origine. Vous pouvez filtrer les 2e, 3e et 7e éléments de la liste d'origine et obtenir une nouvelle liste, comme ci-dessous:
la source
Cela dépend de ce que vous voulez faire.
Si vous souhaitez renvoyer l'élément que vous avez supprimé, utilisez
pop()
:Cependant, si vous souhaitez simplement supprimer un élément, utilisez
del
:En outre,
del
vous permet d'utiliser des tranches (par exempledel[2:]
).la source
En général, j'utilise la méthode suivante:
la source
Encore une autre façon de supprimer un élément (s) d'une liste par index.
a [x: y] pointe vers les éléments de l'index
x
auy-1
. Lorsque nous déclarons cette partie de la liste comme une liste vide ([]
), ces éléments sont supprimés.la source
Vous pouvez simplement rechercher l'élément que vous souhaitez supprimer. C'est vraiment simple. Exemple:
Sortie: acde
la source
Utilisez le code suivant pour supprimer l'élément de la liste:
Si vous souhaitez supprimer les données d'élément d'index de la liste, utilisez:
la source
Comme mentionné précédemment, la meilleure pratique est del (); ou pop () si vous avez besoin de connaître la valeur.
Une autre solution consiste à ré-empiler uniquement les éléments souhaités:
eta: hmm ... ne fonctionnera pas sur les valeurs d'index négatives, réfléchira et mettra à jour
Je suppose
le réparerait ... mais soudain, cette idée semble très fragile. Expérience de pensée intéressante cependant. Il semble qu'il devrait y avoir un moyen «approprié» de le faire avec la compréhension append () / list.
méditer
la source
del()
? Pour cette fonction, vous fournissez la liste comme premier argument de cette fonction, puis l'index, ou l'index d'abord, puis la liste? Renvoie-t-il l'argument de liste sans l'élément ou effectue-t-il la suppression sur place? Je connais ladel
déclaration, mais pas une fonction du même nom.Il ne semble pas que vous travailliez avec une liste de listes, donc je serai bref. Vous voulez utiliser pop car il supprimera les éléments et non les éléments qui sont des listes, vous devez utiliser del pour cela. Pour appeler le dernier élément en python c'est "-1"
la source
pop()
et lesdel
deux suppriment un élément à l'index fourni, que cet élément soit lui-même une liste ou non.a = [1, [2, 3], 4]; del a[1]; b = [1, [2, 3], 4]; b.pop(1); assert a == b
l - liste de valeurs; nous devons supprimer les index de la liste inds2rem .
la source
<map at 0x7f4d54109a58>
. et l est gamme (0,20)Utilisez la fonction "del" :
Par exemple, si vous souhaitez supprimer les 3 derniers éléments, votre code doit être:
Par exemple, si vous souhaitez supprimer les 8 derniers éléments, votre code doit être:
la source
del
est une déclaration . Si c'était une fonction, il faudrait écriredel(listame[-N])
Il a déjà été mentionné comment supprimer un seul élément d'une liste et quels sont les avantages des différentes méthodes. Notez, cependant, que la suppression de plusieurs éléments peut entraîner des erreurs:
Les éléments 3 et 8 (et non 3 et 7) de la liste d'origine ont été supprimés (car la liste a été raccourcie pendant la boucle), ce qui n'était peut-être pas l'intention. Si vous souhaitez supprimer plusieurs index en toute sécurité, vous devez d'abord supprimer les éléments avec l'index le plus élevé, par exemple comme ceci:
la source
Ou si plusieurs index doivent être supprimés:
Bien sûr, cela pourrait également faire:
la source
Vous pouvez utiliser del ou pop pour supprimer l'élément de la liste en fonction de l'index. Pop imprimera le membre qu'il supprime de la liste, tandis que la liste supprimera ce membre sans l'imprimer.
la source
On peut utiliser del ou pop, mais je préfère del, car vous pouvez spécifier l'index et les tranches, donnant à l'utilisateur plus de contrôle sur les données.
Par exemple, en commençant par la liste affichée, on peut supprimer son dernier élément avec
del
comme tranche, puis on peut supprimer le dernier élément du résultat en utilisantpop
.la source