Usar la insertfunción de una lista es mucho más lento que lograr el mismo efecto usando la asignación de corte:
> python -m timeit -n 100000 -s "a=[]" "a.insert(0,0)"
100000 loops, best of 5: 19.2 usec per loop
> python -m timeit -n 100000 -s "a=[]" "a[0:0]=[0]"
100000 loops, best of 5: 6.78 usec per loop
(Tenga en cuenta que a=[]solo es la configuración, por lo que acomienza vacío pero luego crece hasta 100,000 elementos).
Al principio pensé que tal vez sea la búsqueda de atributos o la sobrecarga de llamadas a funciones, pero insertar cerca del final muestra que eso es insignificante:
> python -m timeit -n 100000 -s "a=[]" "a.insert(-1,0)"
100000 loops, best of 5: 79.1 nsec per loop
¿Por qué la función de "insertar un solo elemento" presumiblemente más simple es mucho más lenta?
También puedo reproducirlo en repl.it :
from timeit import repeat
for _ in range(3):
for stmt in 'a.insert(0,0)', 'a[0:0]=[0]', 'a.insert(-1,0)':
t = min(repeat(stmt, 'a=[]', number=10**5))
print('%.6f' % t, stmt)
print()
# Example output:
#
# 4.803514 a.insert(0,0)
# 1.807832 a[0:0]=[0]
# 0.012533 a.insert(-1,0)
#
# 4.967313 a.insert(0,0)
# 1.821665 a[0:0]=[0]
# 0.012738 a.insert(-1,0)
#
# 5.694100 a.insert(0,0)
# 1.899940 a[0:0]=[0]
# 0.012664 a.insert(-1,0)
Yo uso Python 3.8.1 de 32 bits en Windows 10 de 64 bits.
repl.it usa Python 3.8.1 de 64 bits en Linux de 64 bits.
a=[1,2,3];a[100:200]=[4]se agrega 4al final de la lista ainteresante.
a=[]; a[0:0]=[0]o que a[0:0]=[0]hace lo mismo que a[100:200]=[0]...
a=[]; a[0:0]=[0]hace lo mismo quea=[]; a[100:200]=[0]