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:
>>> a = [1, 2, 4]
>>> insert_at = 2 # Index at which you want to insert item
>>> b = a[:] # Created copy of list "a" as "b".
# Skip this step if you are ok with modifying the original list
>>> b[insert_at:insert_at] = [3] # Insert "3" within "b"
>>> b
[1, 2, 3, 4]
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:
>>> a = [1, 2, 4]
>>> insert_at = 2 # Index starting from which multiple elements will be inserted
# List of elements that you want to insert together at "index_at" (above) position
>>> insert_elements = [3, 5, 6]
>>> a[insert_at:insert_at] = insert_elements
>>> a # [3, 5, 6] are inserted together in `a` starting at index "2"
[1, 2, 3, 5, 6, 4]
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) :
>>> a = [1, 2, 4]
>>> insert_at = 2
>>> b = [y for i, x in enumerate(a) for y in ((3, x) if i == insert_at else (x, ))]
>>> b
[1, 2, 3, 4]
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)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b[500:500] = [3]"
100000 loops, best of 3: 3.08 µsec per loop
Réponse acceptée d'ATOzTOA basée sur la fusion de listes découpées - Seconde (6,71 µs par boucle)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "b = a[:500] + [3] + a[500:]"
100000 loops, best of 3: 6.71 µsec per loop
Réponse de Rushy Panchal avec la plupart des votes utilisantlist.insert(...)
- Troisième (26,5 usec par boucle)
python3 -m timeit -s "a = list(range(1000))" "b = a[:]; b.insert(500, 3)"
10000 loops, best of 3: 26.5 µsec per loop
Ma réponse avec List Comprehension etenumerate
- Quatrième (très lent avec 168 µs par boucle)
mquadri$ python3 -m timeit -s "a = list(range(1000))" "[y for i, x in enumerate(a) for y in ((3, x) if i == 500 else (x, )) ]"
10000 loops, best of 3: 168 µsec per loop
b = a[:].insert(2,3)
semble assez court, n'affecte pas la liste originale et est assez descriptif.