agregar () vs extender () vs insertar () en las listas de Python

Las listas son una de las estructuras de datos más útiles disponibles en Python, o realmente en cualquier lenguaje de programación, ya que se usan en tantos algoritmos diferentes y...

Adición de elementos a una lista

Las listas son una de las estructuras de datos más útiles disponibles en Python, o realmente en cualquier lenguaje de programación, ya que se usan en tantos algoritmos y soluciones diferentes.

Una vez que hemos creado una lista, muchas veces es posible que necesitemos agregarle nuevos elementos, ya sea al final, al principio o en algún punto intermedio. Python nos ofrece tres métodos diferentes para hacerlo. En este artículo mostraré las diferencias entre los métodos de lista append, extend e insert.

Adjuntar

Este método agrega un elemento al final de una lista existente. La sintaxis para usarlo es:

1
a.append(x)

Aquí la variable a es nuestra lista, y x es el elemento a agregar. Esta expresión es equivalente a a[len(a):] = [x].

Por ejemplo, aquí está cómo usarlo para colocar el elemento "y" al final de nuestra lista, a:

1
2
3
4
a = [1, 'x', 2]
a.append('y')

print(a)

Ejecutar este código dará como resultado el siguiente resultado:

1
2
$ python append.py
[1, 'x', 2, 'y']

Insertar

Este método inserta un elemento en una posición específica dentro de la lista dada. La sintaxis es:

1
a.insert(i, x)

Aquí el argumento i es el índice del elemento antes del cual insertar el elemento x. Por lo tanto, a.insert(len(a), x) es lo mismo que a.append(x). Aunque, el poder de este método radica en usarlo para colocar elementos en algún lugar dentro de la lista y no al final. Si solo necesita agregar un elemento al final de la lista, append funciona bien para eso, y es más rápido (lo cual es importante para listas grandes).

Por ejemplo:

1
2
3
4
a = [1, 'x', 'y']
a.insert(2, 2)

print(a)

Este código dará como resultado el siguiente resultado:

1
2
$ python insert.py
[1, 'x', 2, 'y']

Como puede ver, el elemento dado se coloca en cualquier lugar de la lista que especificamos. Esto funciona bien cuando tiene una lista en la que sus elementos están ordenados, por lo que no puede simplemente agregar su elemento al final, como lo haría con append.

Extender

Este método agrega elementos (¡observe su plural!) a una lista agregando todos los elementos del iterable que le pasa. La lista resultante es una que contiene todos los elementos de ambas listas.

La sintaxis para usar este método es:

1
a.extend(x)

En este caso a es nuestra lista y x es un objeto iterable, como otra lista. Este método es equivalente a a[len(a):] = x.

Por ejemplo:

1
2
3
4
5
a = [1, 'x', 'y']
b = [1, 2]
a.extend(b)

print(a)

La ejecución de este código da como resultado el siguiente resultado:

1
2
$ python extend.py
[1, 'x', 'y', 1, 2]

Observe cómo se combinaron las dos listas, una tras otra.

En Python, también puede lograr los mismos resultados haciendo una simple suma. Así que a + b, en este caso, daría como resultado exactamente la misma matriz que nuestro script anterior. Esto es gracias a la implementación del método __add__() en las listas, pero eso está fuera del alcance de este artículo.

Comparación de cada método

Para ver los diferentes resultados obtenidos a través de estos métodos, hagamos una comparación directa ejecutando el siguiente código:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
a1 = [1, 'x', 'y']
a2 = [1, 'x', 'y']
a3 = [1, 'x', 'y']

b = [2, 3]

a1.append(b)
a2.insert(3, b)
a3.extend(b)

print(a1)
print(a2)
print(a3)

En este programa, hemos definido tres listas con exactamente los mismos elementos. También hemos definido una segunda lista, que agregamos, insertamos y extendemos a cada una de las tres listas similares definidas anteriormente. El resultado es el siguiente:

1
2
3
4
$ python all.py
[1, 'x', 'y', [2, 3]]
[1, 'x', 'y', [2, 3]]
[1, 'x', 'y', 2, 3]

Como vemos, tanto append como insert añaden la lista b a la lista inicial, pero como un único elemento, que es una lista. En otras palabras, no agrega cada elemento de b individualmente, sino que agrega el objeto completo.

El método extender, por otro lado, en realidad agrega los elementos individuales de la lista b, como elementos separados y únicos de la lista resultante.

Todo esto está de acuerdo con lo que vimos anteriormente, es decir, append e insert agregan solo un elemento. Mientras que, extender, amplía la lista inicial añadiendo los elementos de la segunda lista al final.

Otra diferencia a considerar es la medida de la eficiencia. Dada la forma en que funciona cada operación, podemos calcular fácilmente la complejidad del tiempo para cada método. O simplemente puede hacer trampa y consultar la Página Complejidad del tiempo en la página wiki de python.org.

Las complejidades temporales son las siguientes:

Método Tiempo Complejidad


añadir() O(1) insertar() O(n) extender() O(k)

Aquí "n" es el número de elementos actualmente en la lista, y "k" es el número de elementos en el objeto de parámetro.

Estos puntos muestran que estos tres métodos son complementarios. Debemos elegir cuál usar, según nuestras necesidades:

  • Si queremos agregar un elemento al final de una lista, debemos usar append. Es más rápido y directo.
  • Si queremos agregar un elemento en algún lugar dentro de una lista, debemos usar insertar. Es la única opción para esto.
  • Si queremos combinar los elementos de otro iterable a nuestra lista, entonces debemos usar extender.

Finalizando

Python presenta varias opciones para agregar elementos a una lista, todas las cuales se complementan entre sí y tienen sus propios casos de uso. En este artículo presentamos tres de esas opciones, cómo usar cada una y cuándo usar cada una. La elección del método que elija debe basarse en sus necesidades.

Licensed under CC BY-NC-SA 4.0