J'ai ceci:
>>> a = [1, 2, 4]
>>> print a
[1, 2, 4]
>>> print a.insert(2, 3)
None
>>> print a
[1, 2, 3, 4]
>>> b = a.insert(3, 6)
>>> print b
None
>>> print a
[1, 2, 3, 6, 4]
Existe-t-il un moyen d'obtenir la liste mise à jour comme résultat, au lieu de mettre à jour la liste d'origine en place?
python
python-2.7
list
insert
ATOzTOA
la source
la source
b = a[:].insert(2,3)
semble assez court, n'affecte pas la liste originale et est assez descriptif.>>> a = [1, 2, 3, 4] >>> b = a[:].insert(2, 5) >>> print b None
Réponses:
l.insert(index, obj)
ne renvoie rien. Il met simplement à jour la liste.Comme l'a dit ATO, vous pouvez le faire
b = a[:index] + [obj] + a[index:]
. Cependant, une autre façon est:la source
Approche la plus efficace en termes de performances
Vous pouvez également insérer l'élément en utilisant l' indexation de tranche dans la liste. Par exemple:
Pour insérer plusieurs éléments ensemble à un index donné , tout ce que vous avez à faire est d'utiliser un ou
list
plusieurs éléments que vous souhaitez insérer. Par exemple:Alternative utilisant la compréhension de liste (mais très lente en termes de performances) :
Comme alternative, cela peut être réalisé en utilisant la compréhension de liste avec
enumerate
aussi. (Mais veuillez ne pas le faire de cette façon. C'est juste à titre d'illustration) :Comparaison des performances de toutes les solutions
Voici la
timeit
comparaison de toutes les réponses avec une liste de 1000 éléments pour Python 3.4.5:Réponse à la mine par insertion tranchée - Plus rapide (3,08 µs par boucle)
Réponse acceptée d'ATOzTOA basée sur la fusion de listes découpées - Seconde (6,71 µs par boucle)
Réponse de Rushy Panchal avec la plupart des votes utilisant
list.insert(...)
- Troisième (26,5 usec par boucle)Ma réponse avec List Comprehension et
enumerate
- Quatrième (très lent avec 168 µs par boucle)la source
3, 3.5
dans cette liste (dans l'ordre) ->a[2:2] = [3,3.5]
. Très soignélist.insert
et l'assignation de tranche), et sur Python 3.8 cette différence a complètement disparu. La manière la plus claire d'insérer un élément est de l'utiliserlist.insert
, évidemment.Le plus court que j'ai:
b = a[:2] + [3] + a[2:]
la source
L'approche la plus propre consiste à copier la liste, puis à insérer l'objet dans la copie. Sur Python 3, cela peut être fait via
list.copy
:Sur Python 2, la copie de la liste peut être réalisée via
new = old[:]
(cela fonctionne également sur Python 3).En termes de performances, il n'y a pas de différence avec les autres méthodes proposées:
la source
Utilisez la méthode Python list insert () . Usage:
Exemple:
Retour
[1, 2, 3, 4, 5]
la source
Is there anyway I can get the updated list as result, instead of updating the original list in place?
votre réponse fait le contraire.