Comment supprimer un élément d'une liste par indice ?
J'ai trouvé list.remove()
mais cette méthode parcourt lentement la liste à la recherche d'un élément. par valeur .
Comment supprimer un élément d'une liste par indice ?
J'ai trouvé list.remove()
mais cette méthode parcourt lentement la liste à la recherche d'un élément. par valeur .
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 à empiler à nouveau uniquement les éléments que vous souhaitez :
a = ['a', 'b', 'c', 'd']
def remove_element(list_,index_):
clipboard = []
for i in range(len(list_)):
if i is not index_:
clipboard.append(list_[i])
return clipboard
print(remove_element(a,2))
>> ['a', 'b', 'd']
eta : hmm... ne fonctionnera pas avec des valeurs d'index négatives, je vais y réfléchir et mettre à jour.
Je suppose
if index_<0:index_=len(list_)+index_
le corrigerait... mais soudain cette idée semble très fragile. Une expérience de pensée intéressante cependant. Il semble qu'il devrait y avoir une façon "correcte" de faire cela avec append() / compréhension de liste.
Réflexion sur
Quelle version de Python possède une fonction del()
? Pour cette fonction, vous fournissez la liste comme premier argument à cette fonction et ensuite l'index, ou l'index d'abord et ensuite la liste ? La fonction renvoie-t-elle l'argument liste sans l'élément, ou effectue-t-elle la suppression sur place ? Je connais la fonction del
mais pas d'une fonction portant le même nom.
Vous n'avez pas l'air de travailler avec une liste de listes, alors je vais être bref. Vous voulez utiliser pop car il va supprimer des éléments qui ne sont pas des listes, vous devriez utiliser del pour cela. Pour appeler le dernier élément en python, c'est "-1".
>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
14 votes
@smci : La liste Python est basée sur un tableau : pour supprimer un élément au milieu, vous devez déplacer tous les éléments sur la droite pour supprimer le vide ; c'est pourquoi elle est
O(n)
dans le temps.deque()
fournit des opérations efficaces aux deux extrémités mais ne fournit pas d'insertions, de consultations et de suppressions O(1) au milieu.0 votes
@J.F.Sebastian : implémentation cPython, oui, merci de me corriger. Strictement le spécification linguistique ne spécifie pas comment implémenter la liste, des implémentations alternatives pourraient choisir d'utiliser une liste liée.
0 votes
@smci : aucune implémentation pratique de Python n'utiliserait
O(n)
accès à l'indexa[i]
(en raison des listes de liens). Note : l'implémentation basée sur les tableaux fournitO(1)
accès à l'index.0 votes
@J.F.Sebastian : bien sûr. J'ai simplement noté que la spécification du langage ne le définit pas c'est un problème d'implémentation. (J'ai été surpris de constater que ce n'était pas le cas).
0 votes
@smci si vous ciblez aussi largement, je ne vois pas comment vous pouvez espérer optimiser quoi que ce soit.
0 votes
@NickT : Je mets simplement en garde pour distinguer quand quelque chose est défini par l'implémentation parce qu'il n'est pas défini dans la spécification du langage. C'est exactement ce genre d'hypothèse qui a causé des problèmes majeurs avec l'instabilité du hachage (entre les plateformes) dans la version 2.x. Évidemment, la plupart des implémentations rationnelles de la liste de Python ne choisiraient jamais la liste chaînée puisque nous voulons que les opérations de base soient O(1). C'est tout.
0 votes
En rapport : Différence entre del, remove et pop sur les listes