Agregar vs extender en listas de Python

    Agregar 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 utilizan en muchos algoritmos y soluciones diferentes.

    Una vez que hemos creado una lista, a menudo 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 append, extendy insert enumerar métodos.

    Adjuntar

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

    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í se explica cómo usarlo para colocar el elemento «y» al final de nuestra lista, a:

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

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

    $ 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:

    a.insert(i, x)
    

    Aquí el argumento i es el índice del elemento antes del cual insertar el elemento x. Así, 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 de la lista y no al final. Si solo necesita agregar un elemento al final de la lista, entonces append funciona bien para eso y es más rápido (lo que es importante para listas grandes).

    Por ejemplo:

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

    Este código dará como resultado la siguiente salida:

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

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

    Ampliar

    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:

    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:

    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:

    $ 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. Entonces a + b, en este caso, daría como resultado la misma matriz exacta que nuestro script anterior. Esto es gracias a la __add__() que se está implementando 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:

    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 adjuntamos, insertamos y ampliamos a cada una de las tres listas similares definidas anteriormente. El resultado es el siguiente:

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

    Como podemos ver, ambos append y insert agregar la lista b a la lista inicial, pero como un solo elemento, que es una lista. En otras palabras, no agrega cada elemento de b individualmente, sino que agrega todo el objeto.

    los extend método, 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 y insert agregue solo un elemento. Mientras, extend, amplía la lista inicial agregando los elementos de la segunda lista al final.

    Otra diferencia a considerar es la medida de eficiencia. Dado cómo funciona cada operación, podemos calcular con bastante facilidad la complejidad del tiempo para cada método. O simplemente puede hacer trampa y ver el Página de complejidad del tiempo en la página wiki de python.org.

    Las complejidades del tiempo son las siguientes:

    Método Tiempo Complejidad

    append()O (1)
    insert()En)
    extend()Okay)

    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 utilizar, 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 insert. Es la única opción para esto.
    • Si queremos combinar los elementos de otro iterable a nuestra lista, entonces deberíamos usar extend.

    Terminando

    Python presenta varias opciones para agregar elementos a una lista, todos los 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.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *