# Python add to list: añadir elementos a la lista Python

Las listas son estructuras de datos fundamentales en informática. **Muchos algoritmos se basan en la modificación de listas**. Te mostramos cómo añadir elementos a una lista de Python.

## ¿Cómo añadir elementos a una lista de Python?

A diferencia de las tuplas y las cadenas, **las listas en Python son “mutables”, es decir, son estructuras de datos modificables**. Podemos añadir elementos a una [lista de Python](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-list/), eliminarlos y cambiar su orden. Hay varias formas de hacerlo, cada una con distintas ventajas y desventajas.

Te presentamos **cuatro enfoques** que puedes utilizar en Python para añadir elementos a una lista:

1. Con los métodos `list` de Python
2. Con concatenación
3. Con la notación *slice*
4. Con *list comprehension*

## Añadir elementos a una lista de Python con el método `list`

En Python, **la clase `list` sirve de base para todas las operaciones con listas**. La clase define una serie de métodos para objetos de lista. Se pueden encontrar tres métodos útiles para agregar elementos a una lista:

<table>
  <thead>
    <tr>
      <th>Método `list`</th>
      <th>Argumentos</th>
      <th>Explicación</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`append()`</td>
      <td>`element`</td>
      <td>Añade un único elemento al final de la lista</td>
    </tr>
    <tr>
      <td>`extend()`</td>
      <td>`[elements]`</td>
      <td>Añade múltiples elementos al final de la lista</td>
    </tr>
    <tr>
      <td>`insert()`</td>
      <td>`index, element`</td>
      <td>Añade un único elemento antes del índice dado</td>
    </tr>
  </tbody>
</table>

Es importante entender que la **modificación se realiza *in situ* para los tres métodos mencionados**. Esto significa que el objeto de lista se modifica en lugar de crear y devolver una nueva lista. En consecuencia, todos los métodos devuelven `None`.

```Python
# List of prime numbers
primes = [2, 3, 5, 7]
# Append additional prime number, saving returned result
should_be_none = primes.append(11)
# Show that the prime was added
assert primes == [2, 3, 5, 7, 11]
# Show that `None` was returned
assert should_be_none is None
```

### Añade un único elemento al final de la lista con append()

El método [Python `append()`](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-append/) se puede utilizar para añadir un **único elemento al final de una lista existente**. Aquí puedes verlo con un ejemplo:

```Python
# List containing single prime number
primes = [2]
# Add an element to the end of the list
primes.append(3)
# Show that the element was added
assert primes == [2, 3]
```

Ten cuidado al utilizar `append()`, ya que este método **siempre añade un único elemento**. Si el elemento a añadir es otra lista, el resultado será una lista anidada:

```Python
# List with two prime numbers
primes = [2, 3]
# Try to appends multiple numbers at once
primes.append([5, 7])
# Accidentally created a nested list
assert primes == [2, 3, [5, 7]]
```

El intento de crear la lista `[2, 3, 5, 7]` ha fallado. Para añadir varios elementos, es mejor usar el método `extend()`.

### Añade elementos al final de la lista con extend()

El método [Python`extend()`](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/extend-de-python/) funciona de forma similar a `append()`, con la diferencia de que **se añaden varios elementos a una lista existente**. Aquí un ejemplo:

```Python
# List containing single prime number
primes = [2]
# Extend list by two elements
primes.extend([3, 5])
# Show that both element were added
assert primes == [2, 3, 5]
```

Ten cuidado con `extend()`, ya que este método espera un **iterable como argumento y desempaqueta sus elementos**. Esto conduce a un comportamiento inesperado cuando se llama con un string:

```Python
# List of friends
friends = ['Mary', 'Jim']
# Try to extend by additional friend
friends.extend('Jack')
# String is unpacked into individual letters
assert friends == ['Mary', 'Jim', 'J', 'a', 'c', 'k']
```

Para añadir un solo elemento a una lista de Python, o bien utiliza `append()`o **encierra el elemento en una lista con corchetes**. Entonces `extend()` también funcionará:

```Python
# List of friends
friends = ['Mary', 'Jim']
# Extend by additional friend inside list
friends.extend(['Jack'])
# Show that it worked
assert friends == ['Mary', 'Jim', 'Jack']
```

### Usa insert() para añadir un único elemento antes del índice especificado

Hasta ahora has podido ver cómo añadir uno o más elementos al final de una lista Python. ¿Pero qué pasa si quieres **insertar un elemento en cualquier posición**? Exactamente para este caso, existe el método [Python `insert()`](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-insert/). Este método toma un índice numérico además del elemento a insertar:

```Python
# List of friends
friends = ['Mary', 'Jim', 'Jack']
# Insert additional friend `"Molly"` before index `2`
friends.insert(2, 'Molly')
# Show that "Molly" was added
assert friends == ['Mary', 'Jim', 'Molly', 'Jack']
```

Ten cuidado al intentar agregar varios elementos con `insert()`, ya que el método inserta exactamente un elemento, **lo que puede resultar en una lista anidada inesperada**:

```Python
# List of friends
friends = ['Mary', 'Jim']
# Try to insert multiple friends at once
friends.insert(1, ['Molly', 'Lucy'])
# Accidentally created a nested list
assert friends == ['Mary', ['Molly', 'Lucy'], 'Jim']
```

Para insertar **varios elementos correctamente dentro de una lista**, utiliza un bucle `for`. Además, puedes utilizar la función `reserved()`para mantener el orden de los elementos insertados:

```Python
# List of friends
friends = ['Mary', 'Jim']
# Using `reversed()` keeps order of inserted elements
for friend in reversed(['Molly', 'Lucy']):
    friends.insert(1, friend)
# Show that it worked
assert friends == ['Mary', 'Molly', 'Lucy', 'Jim']
```

## Añadir elementos a una lista de Python con concatenación

Además de los métodos `list` presentados, existe otra posibilidad de añadir elementos a una lista Python con **concatenación**. Para ello se utiliza el operador `+`de Python. La concatenación de listas es similar al uso de `extend()`. Sin embargo, la concatenación crea una nueva lista en lugar de operar “in-place”.

Crea dos listas y añade la segunda a la primera. Como la **operación devuelve una nueva lista**, asigna el valor de retorno a una nueva lista:

```Python
# List of guys
guys = ['Jim', 'Jack']
# List of gals
gals = ['Molly', 'Mary']
# Concatenate both lists
folks = guys + gals
# Show that it worked
assert folks == ['Jim', 'Jack', 'Molly', 'Mary']
```

En este caso, **el operador de concatenación llama al método `__add__()`**. Por lo tanto, las expresiones `guys + gals` y `guys.__add__(gals)` son equivalentes:

```Python
# Show that both expressions return the same result
assert guys + gals == guys.__add__(gals)
```

Si estás familiarizado con los [Python operators](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-operators/), ya lo habrás adivinado. La **concatenación de listas también es compatible con la asignación aumentada**. Para ello, se utiliza el operador `+=` para añadir elementos a una lista “in-place”:

```Python
# Shopping list
groceries = ['Milk', 'Bread', 'Eggs']
# Add butter
groceries += ['Butter']
# Show that it worked
assert groceries == ['Milk', 'Bread', 'Eggs', 'Butter']
```

El operador `+=` llama al método `__iadd__()`, donde la “i” significa “in-place”. De forma análoga al método `extend()`, el **receptor del método se modifica directamente**. Por lo tanto, las siguientes líneas son equivalentes:

- `groceries = groceries + ['Butter']`
- `groceries += ['Butter']`
- `groceries.__iadd__(['Butter'])`
- `groceries.extend(['Butter'])`

Ten cuidado cuando uses los operadores de concatenación de listas para añadir un único elemento a la lista. El **elemento individual debe estar contenido en una lista**, de lo contrario se puede descomprimir un iterable:

```Python
# List of cities
cities = ['London', 'Paris']
# Attempt to add city; likely not what you intended
cities += 'Rome'
# String is unpacked into individual letters
assert cities = ['London', 'Paris', 'R', 'o', 'm', 'e']
```

El **uso de una lista de un solo elemento conduce al efecto que probablemente busques** de añadir otra ciudad a la lista:

```Python
# List of cities
cities = ['London', 'Paris']
# Create a single-element list
cities += ['Rome']
# Now the entire string is added
assert cities = ['London', 'Paris', 'Rome']
```

## Uso de la notación slice para añadir elementos a una lista en Python

Las slices son una **función de Python para seleccionar elementos consecutivos de una lista**. La sintaxis de las slices se corresponden con la conocida función `range()`:

```Python
# The `slice()` function constructs a new `slice` object
slice(start, stop, step=1)
```

Además, existe una **notación “shorthand” para crear objetos slice** junto con el operador de índice `[]`:

```Python
# Select items of list
lst[start:stop:step]
```

Se puede **utilizar un objeto slice en lugar de un índice numérico** para seleccionar varios elementos de una secuencia:

```Python
people = ['Jim', 'John', 'Mary', 'Jack']
# Select elements between index `1` (inclusive) and `3` (exclusive)
assert people[1:3] == ['John', 'Mary']
# Select every other element
assert people[::2] == ['Jim', 'Mary']
```

En **combinación con asignaciones**, los slices pueden usarse como alternativa a los métodos `list` `append()`, `extend()` e `insert()`:

<table>
  <thead>
    <tr>
      <th>Método `list`</th>
      <th>Asignación de slice correspondiente</th>
      <th>Explicación</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`lst.append(element)`</td>
      <td>`lst[len(lst)+1:] = [element]`</td>
      <td>Añade un elemento al final de la lista</td>
    </tr>
    <tr>
      <td>`lst.extend([elements])`</td>
      <td>`lst[len(lst)+1:] = [elements]`</td>
      <td>Añade múltiples elementos al final de la lista</td>
    </tr>
    <tr>
      <td>`lst.insert(index, element)`</td>
      <td>`lst[index:index] = [element]`</td>
      <td>Añade un elemento antes del índice dado</td>
    </tr>
  </tbody>
</table>

Para entender cómo funciona, observa primero cómo **asignar un elemento de lista por índice numérico**. En este caso, se sobrescribe un único elemento de la lista:

```Python
# List of groceries
groceries = ['Milk', 'Bread', 'Eggs']
# Overwrite element at index `1`
groceries[1] = 'Fruit'
# Show that it worked
assert groceries == ['Milk', 'Fruit', 'Eggs']
```

¿Qué pasa si quieres insertar un **elemento por asignación de índice**? Usa un slice que contenga el índice deseado como valores `start` y `stop`. Para que la asignación de slice funcione, es obligatorio tener una lista a la derecha del signo igual:

```Python
# List of groceries
groceries = ['Milk', 'Bread', 'Eggs']
# Insert element before index `1`
groceries[1:1] = ['Fruit']
# Show that it worked
assert groceries == ['Milk', 'Fruit', 'Bread', 'Eggs']
```

Con este truco puedes incluso **insertar varios elementos a la vez en una lista Python**. El método `insert()` no puede hacerlo:

```Python
# List of groceries
groceries = ['Milk', 'Bread', 'Eggs']
# Insert elements before index `1`
groceries[1:1] = ['Fruit', 'Butter']
# Show that it worked
assert groceries == ['Milk', 'Fruit', 'Butter', 'Bread', 'Eggs']
```

Además, las **asignaciones de slices pueden usarse para sobrescribir selectivamente elementos de una lista**. En definitiva, las slices son una función muy flexible que debería estar en la caja de herramientas de todos los programadores de Python.

## Añadir elementos Python a una lista con list comprehension

Un caso de uso común para añadir elementos a una lista en Python es poblar una **nueva lista con elementos**. El método estándar, que funciona en Python como en la mayoría de los lenguajes de programación, es el siguiente:

1. Crear una lista vacía
2. Crear elementos mediante bucle
3. Ampliar la lista con el elemento creado

Como ejemplo, observa cómo **generar la lista de los diez primeros números cuadrados**:

```Python
# Empty list to be filled
squares = []
# Successively create numbers 0..9
for n in range(10):
    # Compute squared number
    squared = n * n
    # Append squared number to list
    squares.append(squared)
# Show that it worked
assert squares == [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
```

Sin embargo, hay un enfoque mejor en Python. Es el llamado **list comprehension**, que genera la lista sin un bucle `for` y una variable de lista vacía:

```Python
# Create first ten square numbers
squares = [n ** 2 for n in range(10)]
# Show that it worked
assert squares == [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
```

Por muy atractivo que sea, el list comprehension **solo sirve para rellenar una lista nueva**. Para ampliar una lista existente, se recurre a los métodos ya presentados.

Consejo Con [Deploy Now](https://www.ionos.es/alojamiento/deploy-now "Deploy Now – Implementa páginas web y aplicaciones a través de GitHub - IONOS") de IONOS puedes implementar páginas web y aplicaciones a través de GitHub.


This is a markdown version of: [https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/anadir-elementos-a-una-lista-de-python/](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/anadir-elementos-a-una-lista-de-python/) for AI/LLM consumption.